在js若要對元素進行一些互動的處理,通常會用到event binding
像是 element.addEventListener
而在vue做這件事時,可以使用 v-on: 來做event binding
如果要對一個 div 元素加上click事件,可以有以下寫法
// 加入事件處理
element.addEventListener('click', ClickHandler)
// 移除事件處理
element.removeEventListener('click', ClickHandler)
$(element).on('click', ClickHandler)
<div v-on:click="ClickHandler">
</div>
更精簡的寫法
<div @click="ClickHandler">
v-on: 可以簡寫成 @
</div>
vue透過直接在元素上綁定對應,有以下好處:
不用把要綁定的元素找出來
在SPA應用中不需要自行移除event
在SPA中,有時使用了 addEventListener 卻沒有移除的話
那就有可能會因為多次瀏覽特定頁面,導致網頁的事件綁定變得非常多
直接在元素上綁定,讓事件對應的元素更直觀
不過當綁定的事件比較多時,這也有可能反而變成了缺點就是了
在使用v-on綁定keyboard event時,有一些小技巧可以用
對div元素,或者說是非input類型的元素,要綁定keyboard event時
可以使用 tabindex="0" 來讓事件被驅動
<div
@keydown.down="SomeHandler">
當按下 down 時,"不會"觸發 SomeHandler
</div>
<div tabindex="0"
@keydown.down="SomeHandler">
當按下 down 時,"會"觸發 SomeHandler
</div>
代表鍵盤上輸入的key必須完全一致
<div tabindex="0"
@keydown.down="SomeHandler">
當按下 shift+down 時,"會"觸發 SomeHandler
</div>
<div tabindex="0"
@keydown.exact.down="SomeHandler">
當按下 shift+down 時,"不會"觸發 SomeHandler
</div>
對自定義 Component 綁定事件時,加上native可以讓事件被驅動
<CustomComponent
tabindex="0"
@keydown.down="SomeHandler" />
SomeHandler "可能不會"被驅動
<CustomComponent
tabindex="0"
@keydown.native.down="SomeHandler" />
SomeHandler "會"被驅動