Vue事件處理

監聽事件

可以使用v-on指令監聽DOM事件,並在觸發的時候運行一些JavaScript代碼。

<button v-on:click="counter+1"></button>

事件處理方法

因爲事件處理邏輯會更爲複雜,所以直接把JavaScript代碼寫在v-on指令中是不可行的,因此v-on還可以接受一個需要調用的方法名稱。

<button v-on:click="greet"></button>

var vm = new Vue({
    el: '#el',
    methods: {
        greet: function() {}
    }
})

內聯處理器中的方法

除了直接綁定到一個方法,也可以在內聯JavaScript語句中調用方法:

<div>
    <button v-on:click="say('hi')"></button>
</div>

有時也需要在內聯語句處理器中訪問原始的DOM事件。可以用特殊變量$event把它傳入方法:

<button v-on:click="warn('form connot be submit', $event)"></button>

事件修飾符

在事件處理程序中調用event.preventDefault()event.stopPropagation()是非常常見的需求,儘管我們可以在方法中輕鬆實現這點,但是更好的方式是:方法只有純粹的數據邏輯,不是去處理DOM事件細節

爲了解決這個問題,Vue提供了v-on 事件修飾符。修飾符是由點開頭的指令後綴表示的。

.stop
.prevent
.capture
.self
.once
.passive

//阻止事件冒泡
<a v-on:click.stop="do">
//提交事件不再重載頁面
<a v-on:click.prevent="do">
//修飾符可以串聯
<a v-on:click.stop.prevent="do">
//只有修飾符
<a v-on:click:submit.prevent>
//只當在event.target是當前元素自身時觸發處理函數
// 即事件不是從內部元素觸發的
<div v-on:click.self="do">
使用修飾符時,順序很重要;相應的代碼會以同樣的順序產生。因此,用v-on:click.prevent.self會阻止所有的點擊,而v-on:click.self只會阻止對元素自身的點擊。

2.1.4新增

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

.once修飾符不僅可以使用在原生的DOM事件中,還可以使用在自定的組件事件中。

2.3.0新增

Vue還對應addEventListener中的passive選項提供了.passive修飾符。

<!-- 滾動事件的默認行爲 (即滾動行爲) 將會立即觸發 -->
<!-- 而不會等待 `onScroll` 完成  -->
<!-- 這其中包含 `event.preventDefault()` 的情況 -->
<div v-on:scroll.passive="onScroll">...</div>

不要把 .passive 和 .prevent 一起使用,因爲 .prevent 將會被忽略,同時瀏覽器可能會向你展示一個警告。請記住,.passive 會告訴瀏覽器你不想阻止事件的默認行爲。

按鍵修飾符

Vue允許爲v-on在監聽鍵盤事件時添加按鍵修飾符:

//只有在keyCode是13的時候調用
<input v-on:keyup.13="submit">

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

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

全部按鍵別名

.enter
.tab
.delete
.esc
.space
.up
.down
.left
.right

可以通過全局config.keyCodes對象自定義按鍵修飾符別名

config.keyCodes.f1 = 12

系統修飾鍵

.ctrl
.alt
.shift
.meta

.exact修飾符

精確修飾符

鼠標按鈕修飾符

.left
.right
.middle
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章