官方連結 v-on
v-on 的修飾符滿多的,我們在第三天有先提過很常用到的 prevent
,
接著要來聊聊其他的修飾符。
.stop - 调用 event.stopPropagation()。
stopPropagation()
在MDN的解釋是
阻止呼叫此方法的當前事件,繼續執行捕獲傳遞或冒泡傳遞。
好,都是中文字。
來看看這篇比較容易理解:
[jQuery] event.preventDefault() 與 event.stopPropagation() 的差異
假如:
<p id='p1'>
<a href='#' id='a1'>sample</a>
</p>
在 #p1
跟 #a1
各自設定點擊後有不同的 console.log()
訊息,
如果只點擊<p>
就只跳出一個console.log()
;
但是點擊<a>
就會跳兩個,<p>
的也會跳出來。
加上 stopPropagation()
就可以停止傳導,範例而言使得點擊<a>
只跳一個。
在vue中的範例:
<button @click.stop="doThis"></button>
添加事件侦听器时使用 capture 模式。
上個舉例在觀察console.log()
時,是由內而外傳遞,從<a>
傳到<p>
,
這個 capture
就是讓傳導順序倒過來
只当事件是从侦听器绑定的元素本身触发时才触发回调。
只觸發自己,不傳導。
「可是stop
也做得到啊!」stop
是停止向外傳遞,假如我們想要在<a>
裡面再包一個<span>
,甚至再包更多,
只要多包一層就會有內外傳遞的關係,用self
讓該元素不進行傳導行為。
可以在每個元素都加上self
讓它們每個都沒有傳遞關係selfish!
只触发一次回调。
嗯... 很白話BJ4
用前面的例子來說,只會看到一次的console.log
,之後的任何點擊都不會有作用
跟keyup
搭配的修飾符,例如在<input>
按下 enter會觸發事件。可用key code或別名。
按键修饰符:全部的按键别名
<input @keyup.enter="onEnter">
系统修饰键
舉例:我想要讓 user按著 ctrl時點擊才觸發事件,這個情況用的修飾符。
<div @click.ctrl="doSomething">Do something</div>
全部的系統修飾符只有四個:
「等等,meta是誰?」
在 mac系統就是 cmd,在 windows系統就是旗幟圖案的 windows鍵。
就像那些年我們一起學的 chain rule, 連用的意思
<button @click.stop.prevent="doThis"></button>
按鍵修飾符很適合拿來做互動小遊戲。現在讀書會同時在看 JS&JQ進化之道,感覺時間頗不夠,說不定哪天會直接拿那本書的 hackMD筆記來用當作番外篇XD