Vue.js Method

Method
css


Vue.js 的事件監聽通常都經過 v-on 指令配置在HTML中,雖然也能夠在Javascript 代碼中使用原生 addEventListener 方法添加事件監聽,但Vue.js 自己並不提倡如此。html


看上去這種方式不符合傳統的「關注點分離」的理念,但其實全部的Vue.js 事件處理方法和表達式都嚴格綁定在當前視圖的 ViewModel 上。實際上,採用它提供的 v-on 指令有如下幾點好處:vue


(1)、經過查看HTML 模板便能輕鬆定位 Javascript 代碼中對應的方法app

(2)、無須在Javascript 中手動綁定事件,ViewModel 和 Dom 徹底解耦,更易於測試ide

(3)、當一個 ViewModel 被銷燬時,全部的事件處理器都會被自動刪除測試


如何綁定事件ui

在原生DOM 事件中,咱們能夠經過 Javascript 給 HTML 文檔元素註冊不一樣的事件處理程序。代碼以下:this

<button onclick="learnVue()">submit</button>


AngularJS 也採起了相似的方式,只不過換成了ng-前綴的事件指令:spa

<button ng-click="learnVue()">submit</button>


Vue.js 也採起了這樣的方式來綁定事件orm


一、內聯方式

Vue.js 在HTML 文檔元素中採用 v-on 指令來監聽DOM事件

<div id="app">
    <button v-on:click="say('hi')">Say Hi</button>
    <button v-on:click="count+=1">Say What</button>
</div>


二、methods 配置

上例中,當用戶將click 事件與某個方法綁定時,須要在Vue 實例中進行定義,全部定義的方法都放在methods 屬性下

<div id="example">
    <button v-on:click="greet">Greet</button>
    <button v-on:click="say('hi')">Say Hi</button>
</div>

<script src="//cdn.bootcss.com/vue/1.0.26/vue.js"></script>
<script>
    new Vue({
        el:'#example',
        data:{
            name:'Vue.js',
        },
        //在 methods 對象中定義方法
        methods:{
            greet:function(event){
                //方法內 this 指向 Vue實例對象
                console.log(this);
                console.log('Hello' +this.name+'!');
                //event 是原生 DOM 事件
                console.log(event.target.tagName);

            },
            say:function(msg){
                alert(msg);
            }
        }
    })
</script>

wKioL1g0BY2gRcFJAACA33tSIFs582.png

須要注意的地方以下:

(1)、methods中定義的方法中的this 始終指向建立的 Vue實例

(2)、與事件綁定的方法支持參數 event 即原生 DOM 事件的傳入

(3)、方法用在普通元素上時,只能監聽原生 DOM事件;用在自定義元素組件上時,也能夠監聽子組件觸發的自定義事件



三、 應用

前面的例子中,在Vue 實例中建立的方法須要訪問原生DOM事件時能夠直接傳入 event 來得到。若是在內聯語句處理器中須要訪問原生DOM事件時,則能夠用一個特殊變量 $event 將其傳入方法中。


<div id="example">
    <a href="https://cn.vuejs.org/v2/guide/index.html" v-on:click="prevent($event)">Vue官網</a>
</div>

<script src="//cdn.bootcss.com/vue/1.0.26/vue.js"></script>
<script>
    new Vue({
        el:'#example',
        //在 methods 對象中定義方法
        methods:{
            prevent:function(event){
                //如今咱們能夠訪問原生事件對象
                event.preventDefault();
            }
        }
    })
</script>


這樣,就阻止了點擊a 連接之後,跳轉到Vue頁面

wKiom1g0CIDTK_fiAABUasUyIb8161.png



四、如何使用修飾符

修飾符(modifiers)是以半角句號(.)開始的特殊後綴,用於表示指令應當以特殊方式綁定。在事件處理器上,Vue.js 爲 v-on 提供了4個事件修飾符,即 .prevent, .stop, .capture, .self,使Javascript代碼負責處理純粹的數據邏輯,而不用處理這些DOM事件的細節。


在使用方式上,事件修飾符能夠串聯,代碼示例以下:

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


也能夠只使用修飾符,不綁定事件:

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


4-一、prevent

在事件處理器中,常常須要調用 event.preventDefault() 來阻止事件的默認行爲,Vue.js 提供了 .prevent 事件修飾符以使之在HTML中便能完成操做

<!--提交事件再也不重載頁面-->
<form v-on:submit.prevent="onSubmit"></form>


4-二、stop

event.stopPropagation() 用於阻止事件冒泡,Vue.js 也提供了相應的.stop事件修飾符

<!--阻止單擊事件冒泡-->
<a v-on:click.stop="doSomething"></a>


4-三、capture

.capture事件修飾符是 Vue.js 1.0.16 版本中新增的,表示事件偵聽器時採用 capture 即捕獲模式

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


4-四、self

.self 事件修飾符一樣是 Vue.js 1.0.16 版本中新增的,表示只當事件在該元素自己(而不是子元素)觸發時觸發回調

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



五、按鍵

監聽鍵盤事件常常須要檢測 keyCode。Vue.js 能夠爲 v-on 添加鍵盤修飾符

<!--只有在keyCode是13時 調用vm.submit()-->
<input v-on:keyup.13="submit">


更多關於keyCode的介紹,可參考博文 http://dapengtalk.blog.51cto.com/11549574/1860203

相關文章
相關標籤/搜索