vue事件處理器
1.監聽事件
可以用v-on
指令監聽DOM事件來觸發一些JavaScript程式碼
示例:
//HTML
<div id="example-1">
<button v-on:click="counter += 1">增加 1</button>
<p>這個按鈕被點選了 {{ counter }} 次。</p>
</div>
//JS
var example1 = new Vue({
el: '#example-1',
data: {
counter: 0
}
})
你每點選一下按鈕,下方的數字就增加1;直接採用js程式碼內嵌的方式,將count += 1
2.方法事件處理器
當JavaScript比較少的時候直接將其寫入v-on
中是完全可以的,但是如果JavaScript程式碼量比較大的話,這樣寫就有些反人類了,因此v-on
可以接受一個定義的方法來呼叫
示例:
//HTML
<div id="example-2">
<!-- `greet` 是在下面定義的方法名 -->
<button v-on:click="greet">Greet</button>
</div>
//JS
var example2 = new Vue({
el: '#example-2' ,
data: {
name: 'Vue.js'
},
// 在 `methods` 物件中定義方法
methods: {
greet: function (event) {
// `this` 在方法裡指當前 Vue 例項
alert('Hello ' + this.name + '!')
// `event` 是原生 DOM 事件
alert(event.target.tagName)
}
}
})
// 也可以用 JavaScript 直接呼叫方法
example2.greet() // -> 'Hello Vue.js!'
這裡直接將JS程式碼轉移到script標籤中統一編寫,更加方便維護
3.內聯處理器方法
除了直接繫結一個方法,也可以用內聯JavaScript語句:
//HTML
<div id="example-3">
<button v-on:click="say('hi')">Say hi</button>
<button v-on:click="say('what')">Say what</button>
</div>
//JS
new Vue({
el: '#example-3',
methods: {
say: function (message) {
alert(message)
}
}
})
有時候我們會遇到需要在內斂語句處理器中訪問原聲DOM事件的情況,這時候我們可以用特殊變數$event把它傳入方法:
//HTML
<button v-on:click="warn('Form cannot be submitted yet.', $event)">Submit</button>
//JS
// ...
methods: {
warn: function (message, event) {
// 現在我們可以訪問原生事件物件
if (event) event.preventDefault()
alert(message)
}
}
event具體的方法呼叫見事件修飾符
4.事件修飾符
在事件處理程式中呼叫event.preventDefault()
或event.stopDefault()
是非常常見的需求。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>
//the click event will be triggered at most once
<a v-on:click.once="doThis"></a>
新新增的.once
可以之間用在元件events上
5.按鍵修飾符
在監聽鍵盤事件時,我們經常需要監測常見的鍵值。Vue允許為v-on
在監聽事件時新增按鍵修飾符:
//只有在 keyCode 是 13 時呼叫 vm.submit()
<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
物件自定義按鍵修飾符別名
Vue.config.keyCodes.f1 = 112
可以用如下修飾符開啟滑鼠或鍵盤事件監聽,使在按鍵按下時發生響應。
.ctrl
.alt
.shift
.meta
6.使用v-on
的好處
1.掃一眼HTML模板便能輕鬆定位在JavaScript程式碼裡對應的方法
2.無需再JavaScript裡手動繫結事件,viewModel程式碼尅是非常純粹的邏輯,和DOM完全解耦,更易於測試。
3.當一個viewModel被銷燬時,所有的時間處理器都會自動被刪除。無須擔心如何自己清理它們