Vue事件修飾符native、self示例詳解
事出有因
之前面試被問到的native和self相關(guān)問題,self我覺得自己應(yīng)該能回答出來,可能被之前一小時的問題整懵逼了。尷尬~~
自己研究了一下,不足之處望補(bǔ)充,相互進(jìn)步
native
修飾符native,有什么用
- native是原生事件(第一反應(yīng),當(dāng)時沒然后了...)
惡補(bǔ)一下
- 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)文章
vue+vuex+json-seiver實現(xiàn)數(shù)據(jù)展示+分頁功能
這篇文章主要介紹了vue+vuex+json-seiver實現(xiàn)數(shù)據(jù)展示+分頁功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-04-04
解決Vue的項目使用Element ui 走馬燈無法實現(xiàn)的問題
這篇文章主要介紹了解決Vue的項目使用Element ui 走馬燈無法實現(xiàn)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
vue-manage-system升級到vue3的開發(fā)總結(jié)分析
這篇文章主要為大家介紹了vue-manage-system升級到vue3的開發(fā)總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Vue+element自定義指令如何實現(xiàn)表格橫向拖拽
這篇文章主要介紹了Vue+element自定義指令如何實現(xiàn)表格橫向拖拽,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
Vue項目保持element組件同行,設(shè)置組件不自動換行問題
這篇文章主要介紹了Vue項目保持element組件同行,設(shè)置組件不自動換行問題。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
vue-router 控制路由權(quán)限的實現(xiàn)
這篇文章主要介紹了vue-router 控制路由權(quán)限的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09

