1. 程式人生 > >vue學習筆記(一)關於事件冒泡和鍵盤事件 以及與Angular的區別

vue學習筆記(一)關於事件冒泡和鍵盤事件 以及與Angular的區別

一、事件冒泡

方法一、使用event.cancelBubble = true來阻止冒泡

<div @click="show2()">

    <input type="button" value="按鈕" @click="show1($event)">

    </div>

    methods:{

        show1:function(ev){

            console.log(ev);

            alert(1);

            ev.cancelBubble=true;   /*阻止冒泡*/

        },

        show2:
function(){ alert(2); } }

方法二:使用vue自帶的方法阻止冒泡

<div @click="show2()">

            <input type="button" value="按鈕" @click.stop="show1()">

        </div>

           拓展:事件修飾符

參考API:http://cn.vuejs.org/v2/guide/events.html#事件修飾符

在事件處理程式中呼叫 event.preventDefault() 或 event.stopPropagation() 是非常常見的需求。儘管我們可以在 methods 中輕鬆實現這點,但更好的方式是:methods 只有純粹的資料邏輯,而不是去處理 DOM 事件細節。

為了解決這個問題, Vue.js 為 v-on 提供了 事件修飾符。通過由點(.)表示的指令字尾來呼叫修飾符。

        .stop

.prevent

.capture

.self

.once

<!-- 阻止單擊事件冒泡 -->

<a v-on:click.stop="doThis"></a>

<!-- 提交事件不再過載頁面 -->

<form v-on:submit.prevent="onSubmit"></form>

<!-- 修飾符可以串聯  -->

<a v-on:click.stop.prevent="doThat"></a>

<!-- 只有修飾符 -->

<form v-on:submit.prevent></form>

<!-- 新增事件偵聽器時使用事件捕獲模式 -->

<div v-on:click.capture="doThis">...</div>

<!-- 只當事件在該元素本身(而不是子元素)觸發時觸發回撥 -->

<div v-on:click.self="doThat">...</div>

<!-- 點選事件將只會觸發一次 -->

<a v-on:click.once="doThis"></a>

二、鍵盤事件

<input type="text" @keydown="show">

show:function(){

     alert(1);

    }

    <input type="text" @keydown="show2($event)">

    show2:function(ev){

        console.log(ev.keyCode);

        if(ev.keyCode==13){

            alert('按下了回車鍵盤');

        }

    },

  <input type="text" @keyup="show3($event)">

show3:function(ev){

        console.log(ev.keyCode);

        if(ev.keyCode==13){

            alert('回車鍵盤彈起的時候觸發的事件show3');

        }

    }

  拓展:按鍵修飾符

  參考API:http://cn.vuejs.org/v2/guide/events.html#按鍵修飾符

  在監聽鍵盤事件時,我們經常需要監測常見的鍵值。 Vue 允許為 v-on 在監聽鍵盤事件時新增按鍵修飾符:

  <!-- 只有在 keyCode 是 13 時呼叫 vm.submit() -->

<input v-on:keyup.13="submit">

記住所有的 keyCode 比較困難,所以 Vue 為最常用的按鍵提供了別名

<!-- 同上 -->

<input v-on:keyup.enter="submit">

<!-- 縮寫語法 -->

<input @keyup.enter="submit">

全部的按鍵別名:

.enter

.tab

.delete (捕獲 “刪除” 和 “退格” 鍵)

.esc

.space

.up

.down

.left

.right

.ctrl

.alt

.shift

.meta

********

注意:在Mac系統鍵盤上,meta對應命令鍵 (?)。在Windows系統鍵盤meta對應windows徽標鍵(?)。在Sun作業系統鍵盤上,meta對應實心寶石鍵 (◆)。在其他特定鍵盤上,尤其在MIT和Lisp鍵盤及其後續,比如Knight鍵盤,space-cadet鍵盤,meta被標記為“META”。在Symbolics鍵盤上,meta被標記為“META” 或者 “Meta”。

********

可以通過全域性 config.keyCodes 物件自定義按鍵修飾符別名:

// 可以使用 v-on:keyup.f1

Vue.config.keyCodes.f1 = 112

<!-- Alt + C -->

<input @keyup.alt.67="clear">

<!-- Ctrl + Click -->

<div @click.ctrl="doSomething">Do something</div>

三、checkbox

注意對比angular寫法,選中與不選中直接對應的是顯示還是隱藏我們的box,flag在預設的data中設定為false

<input type="checkbox" v-model="flag"/>

    <div class="box" v-if="flag">

        box

    </div>

四、select

對比angular寫法http://www.runoob.com/angularjs/angularjs-select.html

data: {

        selected: 'C',

        options: [

            { text: 'One', value: 'A' },

            { text: 'Two', value: 'B' },

            { text: 'Three', value: 'C' }

        ]

    }

    <select v-model="selected">

    <option v-for="item in options" :value="item.value">

            {{item.text}}

    </option>

    </select><br/>

        選中:{{selected}}

五、radio

對比angular

使用四中的源資料

<ul>

        <li v-for="option in options">

<input type="radio" name="myRadio" :value="option.value"  v-model="selected"/>{{option.text}}

            </li>

        </ul><br/>

        <span>選擇的是: {{ selected }}</span>

六、生命週期函式

對比react生命週期函式

初始化:

getDefaultProps:作用於元件類,只調用一次,返回物件用於設定預設的props,對於引用值,會在例項中共享。

getInitialState:作用於元件的例項,在例項建立時呼叫一次,用於初始化每個例項的state,此時可以訪問this.props。

componentWillMount:在完成首次渲染之前呼叫,此時仍可以修改元件的state。

render

必選的方法,建立虛擬DOM,該方法具有特殊的規則:

只能通過this.props和this.state訪問資料

可以返回null、false或任何React元件

只能出現一個頂級元件(不能返回陣列)

不能改變元件的狀態

不能修改DOM的輸出

componentDidMount:真實的DOM被渲染出來後呼叫,在該方法中可通過this.getDOMNode()訪問到真實的DOM元素。此時已可以使用其他類庫來操作這個DOM。

執行時:

componentWillReceiveProps:元件接收到新的props時呼叫,並將其作為引數nextProps使用,此時可以更改元件props及state。

componentWillReceiveProps: function(nextProps) {

        if (nextProps.bool) {

            this.setState({

                bool: true

            });

        }

    }

shouldComponentUpdate:元件是否應當渲染新的props或state,返回false表示跳過後續的生命週期方法,通常不需要使用以避免出現bug。在出現應用的瓶頸時,可通過該方法進行適當的優化。

componentWillUpdate:接收到新的props或者state後,進行渲染之前呼叫,此時不允許更新props或state。

render

componentDidUpdate:完成渲染新的props或者state後呼叫,此時可以訪問到新的DOM元素。

銷燬:

componentWillUnmount:元件被移除之前被呼叫,可以用於做一些清理工作,在componentDidMount方法中新增的所有任務都需要在該方法中撤銷,比如建立的定時器或新增的事件監聽器。

參考API:http://cn.vuejs.org/v2/guide/instance.html#例項生命週期

每個 Vue 例項在被建立之前都要經過一系列的初始化過程。例如,例項需要配置資料觀測(data observer)、編譯模版、掛載例項到 DOM ,然後在資料變化時更新 DOM 。在這個過程中,例項也會呼叫一些 生命週期鉤子 ,這就給我們提供了執行自定義邏輯的機會。

beforeCreate:例項剛剛被建立1

created:例項已經建立完成2

beforeMount:模板編譯之前3

mounted:模板編譯完成4------********請求資料放在這個裡面  必須記住*****

beforeUpdate:資料更新之前

updated:資料更新完畢

beforeDestroy:例項銷燬之前

destroyed:例項銷燬完成    ----this.$destroy();銷燬例項

{{msg}}

<input type="button" value="更新資料" @click="update()">

    <input type="button" value="銷燬元件" @click="destroy">

  data:{

        msg:'welcome vue2.0'

    },

  methods:{   /*自定義方法*/

        update(){

            this.msg='大家好';

        },

        destroy(){

            this.$destroy();   /*銷燬例項 元件*/

        }

    }

七、模擬百度搜索提示功能

1、監聽文字框中的值

2、請求百度的介面

3、實現方法,watch監聽文字框的輸入變化,按鍵修飾符keyup實現

4、可以在表單的input 元素上使用v-model 指令來建立雙向資料繫結。它會根據input元素的型別自動選取正確的繫結模式。

  // var api='https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd='+newValue;

<input type="text" v-model="search"/>

    <br/>

    <ul>

        <li v-for="item in list">

 

            {{item}}

        </li>

    </ul>

方法一watch:

引入<script src="https://cdn.jsdelivr.net/vue.resource/1.0.3/vue-resource.min.js"></script>

data:{

            search:'',

            list:[]

        }

        var timer='';

        vm.$watch('search',function(newValue){

        console.log(newValue);

        clearTimeout(timer);

 

        var _that=this;

        timer=setTimeout(function(){

            //去伺服器請求資料

            var api='https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd='+newValue;

            _that.$http.jsonp(api,{

                jsonp:'cb'  /*改變回調函式*/

            }).then(function(data){

                console.log(data.body.s);

                _that.list=data.body.s;   /*改變data繫結的值*/

            })

        },200);

    })

 方法二:鍵盤事件  @keyup

<input type="text" v-model="search" @keyup="requestData()"/>

          data:{

            search:'',

            list:[],

            timer:''

        },

        methods:{

            requestData:function(){

                var api='https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd='+this.search;

                var _that=this;

                clearTimeout(this.timer);  /*清除定時器*/

                this.timer=setTimeout(function(){

                    //去伺服器請求資料

                    _that.$http.jsonp(api,{

                        jsonp:'cb'  /*改變回調函式*/

                    }).then(function(data){

                        console.log(data.body.s);

                        _that.list=data.body.s;   /*改變data繫結的值*/

                    })

 

                },200)
            }

        }

相關推薦

java學習筆記成員變數區域性變數以及靜態變數的區別

成員變數和區域性變數的區別        成員變數:           ①成員變數定義在類中,在整個類中都可以被訪問。           ②成員

vue學習筆記關於事件冒泡鍵盤事件 以及Angular區別

一、事件冒泡 方法一、使用event.cancelBubble = true來阻止冒泡 <div @click="show2()"> <input type="button" value="按鈕" @click="show1($event)"

VUE學習筆記—安裝vue-cli建立專案

Github:https://github.com/sueRimn 1.cmd開啟控制檯進行建立專案 (1)全域性安裝腳手架 在命令列輸入:npm install vue-cli -g (2)初始化專案 繼續輸入:vue init webpack myvue(myvue是我取的專案名,

Vue學習筆記

一、指令學習 基本寫法: <body> <div id="app1"> {{message}} </div> <script type="text/javascript"> var vm=ne

vue 學習筆記

例項生命週期鉤子 beforeCreate--->created--->beforeMount--->mounted(beforeUpdate-->updated)---&g

VUE學習筆記基礎

常用指令 v-model:雙向資料繫結 <div id="app"> 輸入您的姓名: <input type="text" v-model="name"> <p>{{ $data | json

vue 學習筆記

vue學習及應用也有一年多了,但一直沒能系統的總結過。多少有些遺憾。正好趕上找工作,就趁此鞏固、總結下吧。 一、vue生命週期函式 beforeCreate , created // 建立前, 建立完成 beforeMount

Vue學習筆記元件

在做課設的時候,動態生成表格需要寫一堆js程式碼,於是乎決定採用一個前端框架來簡化編碼過程,之前已經學過Vue的一些知識了,因此直接從元件開始記錄。 1.簡單的元件例項 <div class="vue"> <button-c

vue學習筆記---- vue指令 v-bind 屬性繫結

**看栗子:** ```html ``` ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201016092756571.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGV

easyUi 學習筆記 使用easyui ztree 創建前端框架

function itl tab javascrip div pos lan 20px wid 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncod

Python + OpenCV 學習筆記>>> 影象的載入儲存

影象屬性: 通道數目 高與寬 畫素資料 影象型別 顯示一張圖片: import cv2 as cv src = cv.imread("/home/pi/Desktop/apple.jpg") cv.namedWindow("input im

Hive程式設計指南-學習筆記 資料型別分隔符

一、Hive概述 Hive定義了類似SQL的查詢語言——HiveQL,使用者編寫HiveQL語句執行MapReduce任務,查詢儲存在Hadoop叢集中的資料。 HiveQL與MySQL最接近,但還是有顯著性差異的。Hive不支援行級插入、更新操作和刪除操作。Hive不支

golang學習筆記——golang基礎相關資料結構

小白前端一枚,最近在研究golang,記錄自己學習過程中的一些筆記,以及自己的理解。 go中包的依賴管理 go中的切片 byte 和 string go中的Map go中的struct結構體 go中的方法 go中的interface介面 inter

ROS學習筆記VirtualBox、ubuntu、ROS安裝配置

ros有幾種版本,ubuntu也有對應的不少版本,有哪些版本代號看這裡——ubuntu版本代號。建議在準備安裝之前去ros官網看一下哪個版本的ros-ubuntu套裝適合你,根據自己的選擇下載安裝對應的ros和ubuntu 我這裡的版本是ROS Melodic Morenia和ubuntu1

React Native 學習筆記--init 專案 執行專案

宣告:此篇blog是在Windows環境下開發Android專案的學習筆記,最近也是在網上翻找資料發現,網上的資源基本上都是Mac環境下的,而且大部分的資料都是關於React Native + Web / Service 的,關於android的學習資源不多,因此也就想通過

學習筆記C#基礎泛型ListDataTableHashTableDictionary的簡單用法--存值 取值

<pre name="code" class="csharp">//Dictionary Dictionary<string, string> dic = new Dictio

STM32學習筆記基本瞭解、晶片內部資源外觀說明

什麼是STM32?新的基於ARM核心的32位MCU系列    核心為ARM公司為要求高效能、低成本、低功 耗的嵌入式應用專門設計的Cortex-M核心標準的ARM架構優點超前的體系結構極高的效能: 主流的Cortex核心。豐富合理的外設,合理的功耗,合理的價格。強大的軟體支援

MyBatis學習筆記——配置檔案中的別名以及mapper中的namespace

MyBatis中如果每次配置類名都要寫全稱也太不友好了,我們可以通過在主配置檔案中配置別名,就不再需要指定完整的包名了。 別名的基本用法: <configuration> <typeAliases> <typeAlias

Python學習筆記:Python代碼的打包發布

新建 raw 就是 程序 文件 distrib pac lib site 在python程序中,一個.py文件被當作一個模塊,在各個模塊中定義了不同的函數。當我們要使用某一個模塊中的某一個函數時,首先須將這個模塊導入,否則就會出現函數未定義的情況. 下面記錄的是打包及安裝包

Redis學習筆記— 基本命令資料型別

MacOs環境 Redis基本命令 啟動服務:redis-server 連線服務:redis-cli -h 指定主機/IP -p 指定埠 -a 指定密碼 關閉服務:先shutdown 儲存資料並關閉服務;再quit 退出服務 獲取伺服器資訊 啟動並連線服務之後,執行info 或直接在shell中執