Vue事件修飾符native、self示例詳解
事出有因
之前面試被問到的native和self相關(guān)問題,self我覺得自己應(yīng)該能回答出來,可能被之前一小時的問題整懵逼了。尷尬~~
自己研究了一下,不足之處望補充,相互進步
native
修飾符native,有什么用
- native是原生事件(第一反應(yīng),當(dāng)時沒然后了...)
惡補一下
- native 一定是用于自定義組件,也就是自定義的html標(biāo)簽
結(jié)合代碼說得明白
<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>
注意點
- 當(dāng)<Son @click='handler1'></Son>,子組件中的this.$listeners返回的是{click: ƒ},box1的dom上沒有綁定click事件(可以打開F12查看),所以這個事件不是原生的click
- 當(dāng)<Son @click.native='handler1'></Son>,子組件中的this.$listeners返回的是{},box1的dom上綁定了click事件(可以打開F12查看),所以這個事件是原生的click
- 當(dāng)<Son @click.self='handler1'></Son>,子組件中的this.$listeners返回的是{click: ƒ},box1的dom上沒有綁定click事件(可以打開F12查看),所以這個事件不是原生的click
- 子組件的this.$emit('eventTpye')是從this.$listeners返回值中查找的
為什么有時候組件點擊事件不會生效
猜測
- 子組件html標(biāo)簽沒有定義click原生事件
- 子組件沒有執(zhí)行this.$emit('click')
所以
直接.native將事件綁定到子組件html標(biāo)簽上,類似dom.addEventListener('click', handler)
self
作用
引用官方說明
<!-- 只當(dāng)在 event.target 是當(dāng)前元素自身時觸發(fā)處理函數(shù) --> <!-- 即事件不是從內(nèi)部元素觸發(fā)的 --> <div v-on:click.self="doThat">...</div>
結(jié)合代碼說明
<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,當(dāng)添加self時,只有當(dāng)兩者相等時才會觸發(fā)回調(diào)
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
相關(guān)文章
Vite+Electron快速構(gòu)建VUE3桌面應(yīng)用的實現(xiàn)
本文主要介紹了Vite+Electron快速構(gòu)建VUE3桌面應(yīng)用的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10Vue異步更新DOM及$nextTick執(zhí)行機制解讀
這篇文章主要介紹了Vue異步更新DOM及$nextTick執(zhí)行機制解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03打通前后端構(gòu)建一個Vue+Express的開發(fā)環(huán)境
這篇文章主要介紹了打通前后端構(gòu)建一個Vue+Express的開發(fā)環(huán)境,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07vue-router之實現(xiàn)導(dǎo)航切換過渡動畫效果
今天小編就為大家分享一篇vue-router之實現(xiàn)導(dǎo)航切換過渡動畫效果,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10