vue @click與@click.native,及vue事件機(jī)制的使用分析
@click與@click.native及vue事件機(jī)制
vue維護(hù)了自己的事件機(jī)制。
所以就有了原生DOM事件和自定義事件的區(qū)別,比如下面這段官網(wǎng)原話。
用在普通元素上時(shí),只能監(jiān)聽原生 DOM 事件。用在自定義元素組件上時(shí),也可以監(jiān)聽子組件觸發(fā)的自定義事件。
本文也將圍繞這一句話展開。
想必大家都會在自定義組件中自定義事件。
<my-component v-on:my-event="doSomething"></my-component>
那么如何給自定義組價(jià)添加原生事件呢,其實(shí)想一想理論上是不可行的,因?yàn)樽远x組件最終不會渲染到頁面上,怎么加?
所以Vue給自定義組件綁定原生事件的做法是:把原生事件綁定到組件的根節(jié)點(diǎn),根節(jié)點(diǎn)就只有一個(gè)嘛…
但是你要告訴vue,當(dāng)前要給原生節(jié)點(diǎn)綁定DOM事件,而不是自定義事件。如下:
<!-- 以下無論你怎么點(diǎn)擊hello都不會觸發(fā)父組件的事件的 --> <!-- 除非加上@click="$emit('click')",也就是觸發(fā)自定義事件 --> <template> ? <div class="hello"> ? ? hello ? </div> </template> <template> ? <div id="app"> ? ? <HelloWorld msg="Welcome to Your Vue.js App" @click="clickEvent"/> ? </div> </template>
<script> ? methods: { ? ? clickEvent(){ ? ? ? console.log('事件觸發(fā)') ? ? } ? } </script>
或者直接簡單的使用.native。
<HelloWorld msg="Welcome to Your Vue.js App" @click.native="clickEvent"/>
好了,你已經(jīng)了解了.native的用途。接下來,再說一說原生節(jié)點(diǎn)綁定自定義DOM事件。直接看代碼如下:
<template> ? <div id="app" @customizedEvent="myEvent"> ? ? <HelloWorld msg="Welcome to Your Vue.js App"/> ? </div> </template>
<script> import HelloWorld from './components/HelloWorld.vue' export default { ? name: 'App', ? components: { ? ? HelloWorld ? }, ? mounted() { ? ? const app = document.getElementById('app'); ? ? const event = document.createEvent('HTMLEvents'); ? ? event.initEvent('customizedEvent', false, true); ? ? app.dispatchEvent(event); ? }, ? methods: { ? ? myEvent() { ? ? ? console.log('customizedEvent') ? ? } ? } } </script>
我們通過原生的事件派發(fā)機(jī)制可以觸發(fā)綁定到原生元素的事件。說明vue幫你做的事情其實(shí)是
app.addEventListener('customizedEvent', myEvent, false);
也就是說并非走的組件中的自定義事件,而是原生的DOM事件。
點(diǎn)擊事件@click 失效
問題:在標(biāo)簽上設(shè)置點(diǎn)擊事件@click,發(fā)現(xiàn)無法觸發(fā)事件發(fā)生
原因:發(fā)現(xiàn)這個(gè)標(biāo)簽上有個(gè)全局樣式,對它造成了影響;
pointer-event: none
解決:將這個(gè)屬性值改為auto即可
pointer-event: auto
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue單應(yīng)用在ios系統(tǒng)中實(shí)現(xiàn)微信分享功能操作
這篇文章主要介紹了vue單應(yīng)用在ios系統(tǒng)中實(shí)現(xiàn)微信分享功能操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09Vue3+TypeScript實(shí)現(xiàn)二維碼生成組件
在?Web?應(yīng)用中,生成二維碼是常見的需求,本文介紹如何用?Vue3?和?TypeScript?開發(fā)一個(gè)二維碼生成組件,支持生成圖片或?canvas?形式的二維碼,并提供豐富的配置選項(xiàng),感興趣的小伙伴跟著小編一起來看看吧2024-04-04vue+elementUI實(shí)現(xiàn)內(nèi)嵌table的方法示例
本文主要介紹了vue+elementUI實(shí)現(xiàn)內(nèi)嵌table的方法示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12vscode中使用vue的一些插件總結(jié)(方便開發(fā))
對于很多使用vscode編寫vue項(xiàng)目的新手同學(xué)來說,可能不知道使用什么插件,下面這篇文章主要給大家介紹了關(guān)于vscode中使用vue的一些插件,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11vue開發(fā)runtime core中的虛擬節(jié)點(diǎn)示例詳解
這篇文章主要為大家介紹了vue開發(fā)runtime core中的虛擬節(jié)點(diǎn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11vue實(shí)現(xiàn)樹形結(jié)構(gòu)樣式和功能的實(shí)例代碼
這篇文章主要介紹了vue樹形結(jié)構(gòu)樣式和功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10詳解從零搭建 vue2 vue-router2 webpack3 工程
本篇文章主要介紹了詳解從零搭建 vue2 vue-router2 webpack3 工程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11vue父組件調(diào)用子組件方法報(bào)錯(cuò)問題及解決
這篇文章主要介紹了vue父組件調(diào)用子組件方法報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09