# 事件處理
# 事件修飾子
# .self
.self 的作用,只會觸發元素自己的事件行為,由子層元素傳遞來的事件則不會觸發。
以 modal 為範例:
<div class="modal-mask">
<div class="modal-container" @click.self="show = false">
<div class="modal-body">
Hello
</div>
</div>
</div>
<base-button @click.native="show = true"></base-button>
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
試一試
如果未加上 .self,再點選 modal-body 區塊,因於 modal-container 的內容,所以 modal 會跟著關閉。
若是在 modal-container 的 click 事件加上 .self 修飾子,即可排除這個問題。
提醒
一個指令可以同時加入多個修飾子,而修飾子的 順序會影響執行的結果。
如 v-on:click.prevent.self 會先執行 prevent 的動作,阻擋所有的點擊行為。
而 v-on:click.self.prevent 會先執行 self ,只會阻擋該元素自己的點擊行為。
# .passive
.passive 等同於 addEventListener 的 passive 屬性,
用途是告訴瀏覽器這個事件處理器會不會呼叫 event.preventDefault 來停止瀏覽器的原生行為。
<div @scroll.passive="onScroll">...</div>
1
這個屬性較常見在用來改善 scroll 事件的效能,因為以前瀏覽器要多判斷 scroll 事件會不會被 preventDefault ,
加上 passive 屬性之後就直接略過這個判斷,當 passive 為 true 表示此事件不會被 preventDefault。
換句話說, .passive 修飾子無法與 .prevent 一起使用,因為這時 .prevent 會直接被無視。
# 鍵盤修飾子
# .exact 精確判斷
如果使用 @keydown.enter 修飾子,輸入框同時按下 Ctrl + Enter 鍵的時候也會執行方法,但加上 .exact 之後就只有在按下 Enter 鍵的時候才會執行。
<input type="text" v.model.trim="msg" @keydown.enter.exact="addMessages" />
1
.exact 通常被用來作為系統按鍵的各種組合判斷使用。