Vue事件修飾符native、self示例詳解
事出有因
之前面試被問到的native和self相關(guān)問題,self我覺得自己應(yīng)該能回答出來,可能被之前一小時(shí)的問題整懵逼了。尷尬~~
自己研究了一下,不足之處望補(bǔ)充,相互進(jìn)步
native
修飾符native,有什么用
- native是原生事件(第一反應(yīng),當(dāng)時(shí)沒然后了...)
惡補(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('父級(jí)')
}
}
})
</script>
注意點(diǎn)
- 當(dāng)<Son @click='handler1'></Son>,子組件中的this.$listeners返回的是{click: ƒ},box1的dom上沒有綁定click事件(可以打開F12查看),所以這個(gè)事件不是原生的click
- 當(dāng)<Son @click.native='handler1'></Son>,子組件中的this.$listeners返回的是{},box1的dom上綁定了click事件(可以打開F12查看),所以這個(gè)事件是原生的click
- 當(dāng)<Son @click.self='handler1'></Son>,子組件中的this.$listeners返回的是{click: ƒ},box1的dom上沒有綁定click事件(可以打開F12查看),所以這個(gè)事件不是原生的click
- 子組件的this.$emit('eventTpye')是從this.$listeners返回值中查找的
為什么有時(shí)候組件點(diǎn)擊事件不會(huì)生效
猜測(cè)
- 子組件html標(biāo)簽沒有定義click原生事件
- 子組件沒有執(zhí)行this.$emit('click')
所以
直接.native將事件綁定到子組件html標(biāo)簽上,類似dom.addEventListener('click', handler)
self
作用
引用官方說明
<!-- 只當(dāng)在 event.target 是當(dāng)前元素自身時(shí)觸發(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時(shí),只有當(dāng)兩者相等時(shí)才會(huì)觸發(fā)回調(diào)
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
解決Vue數(shù)據(jù)更新了但頁(yè)面沒有更新的問題
在vue項(xiàng)目中,有些我們會(huì)遇到修改完數(shù)據(jù),但是視圖卻沒有更新的情況,具體的場(chǎng)景不一樣,解決問題的方法也不一樣,在網(wǎng)上看了很多文章,在此總結(jié)匯總一下,需要的朋友可以參考下2023-08-08
Vite+Electron快速構(gòu)建VUE3桌面應(yīng)用的實(shí)現(xiàn)
本文主要介紹了Vite+Electron快速構(gòu)建VUE3桌面應(yīng)用的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
Vue異步更新DOM及$nextTick執(zhí)行機(jī)制解讀
這篇文章主要介紹了Vue異步更新DOM及$nextTick執(zhí)行機(jī)制解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
打通前后端構(gòu)建一個(gè)Vue+Express的開發(fā)環(huán)境
這篇文章主要介紹了打通前后端構(gòu)建一個(gè)Vue+Express的開發(fā)環(huán)境,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07
vue-router之實(shí)現(xiàn)導(dǎo)航切換過渡動(dòng)畫效果
今天小編就為大家分享一篇vue-router之實(shí)現(xiàn)導(dǎo)航切換過渡動(dòng)畫效果,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10
淺談在不使用ssr的情況下解決Vue單頁(yè)面SEO問題(2)
這篇文章主要介紹了淺談在不使用ssr的情況下解決Vue單頁(yè)面SEO問題(2),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11
使用Vite構(gòu)建Vue3項(xiàng)目的流程步驟
在現(xiàn)代前端開發(fā)的世界中,Vue 3 已然成為了一個(gè)備受喜愛的框架,而 Vite 作為一個(gè)新興的構(gòu)建工具,以其極高的效率和簡(jiǎn)捷的配置方式席卷了開發(fā)者圈,本文我們將一步一步展示如何使用 Vite 構(gòu)建一個(gè) Vue 3 項(xiàng)目,從創(chuàng)建項(xiàng)目到最后的構(gòu)建階段,需要的朋友可以參考下2024-07-07

