Vue事件修飾符native、self示例詳解
事出有因
之前面試被問到的native和self相關問題,self我覺得自己應該能回答出來,可能被之前一小時的問題整懵逼了。尷尬~~
自己研究了一下,不足之處望補充,相互進步
native
修飾符native,有什么用
- native是原生事件(第一反應,當時沒然后了...)
惡補一下
- native 一定是用于自定義組件,也就是自定義的html標簽
結合代碼說得明白
<body> <div id="app"> <div class="box" > <Son @click='handler1'></Son> </div> </div> </body> <script> const Son = Vue.component('Son', { template: '<button @mouseover=handler2 class="box1">son</button>', methods: { handler2 (e) { } } }) new Vue({ el: "#app", components: { Son }, data() { return { a: 123 } }, methods: { handler1 (e) { console.log('父級') } } }) </script>
注意點
- 當<Son @click='handler1'></Son>,子組件中的this.$listeners返回的是{click: ƒ},box1的dom上沒有綁定click事件(可以打開F12查看),所以這個事件不是原生的click
- 當<Son @click.native='handler1'></Son>,子組件中的this.$listeners返回的是{},box1的dom上綁定了click事件(可以打開F12查看),所以這個事件是原生的click
- 當<Son @click.self='handler1'></Son>,子組件中的this.$listeners返回的是{click: ƒ},box1的dom上沒有綁定click事件(可以打開F12查看),所以這個事件不是原生的click
- 子組件的this.$emit('eventTpye')是從this.$listeners返回值中查找的
為什么有時候組件點擊事件不會生效
猜測
- 子組件html標簽沒有定義click原生事件
- 子組件沒有執(zhí)行this.$emit('click')
所以
直接.native將事件綁定到子組件html標簽上,類似dom.addEventListener('click', handler)
self
作用
引用官方說明
<!-- 只當在 event.target 是當前元素自身時觸發(fā)處理函數 --> <!-- 即事件不是從內部元素觸發(fā)的 --> <div v-on:click.self="doThat">...</div>
結合代碼說明
<body> <div id="app"> <div class="box" @click.self='handler1'> <Son ></Son> </div> </div> </body> <script> const Son = Vue.component('Son', { template: '<button @click=handler2 class="box1">son</button>', methods: { handler2 (e) { console.log(e.target, e.currentTarget) } } }) new Vue({ el: "#app", components: { Son }, data() { return { a: 123 } }, methods: { handler1 (e) { console.log(e.target, e.currentTarget) } } }) </script>
就是利用e.target和e.currentTarget,當添加self時,只有當兩者相等時才會觸發(fā)回調
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。
相關文章
Vue異步更新DOM及$nextTick執(zhí)行機制解讀
這篇文章主要介紹了Vue異步更新DOM及$nextTick執(zhí)行機制解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03打通前后端構建一個Vue+Express的開發(fā)環(huán)境
這篇文章主要介紹了打通前后端構建一個Vue+Express的開發(fā)環(huán)境,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07