vue @click與@click.native,及vue事件機(jī)制的使用分析
@click與@click.native及vue事件機(jī)制
vue維護(hù)了自己的事件機(jī)制。
所以就有了原生DOM事件和自定義事件的區(qū)別,比如下面這段官網(wǎng)原話。
用在普通元素上時,只能監(jiān)聽原生 DOM 事件。用在自定義元素組件上時,也可以監(jiān)聽子組件觸發(fā)的自定義事件。
本文也將圍繞這一句話展開。
想必大家都會在自定義組件中自定義事件。
<my-component v-on:my-event="doSomething"></my-component>
那么如何給自定義組價添加原生事件呢,其實想一想理論上是不可行的,因為自定義組件最終不會渲染到頁面上,怎么加?
所以Vue給自定義組件綁定原生事件的做法是:把原生事件綁定到組件的根節(jié)點,根節(jié)點就只有一個嘛…
但是你要告訴vue,當(dāng)前要給原生節(jié)點綁定DOM事件,而不是自定義事件。如下:
<!-- 以下無論你怎么點擊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é)點綁定自定義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幫你做的事情其實是
app.addEventListener('customizedEvent', myEvent, false);也就是說并非走的組件中的自定義事件,而是原生的DOM事件。
點擊事件@click 失效
問題:在標(biāo)簽上設(shè)置點擊事件@click,發(fā)現(xiàn)無法觸發(fā)事件發(fā)生

原因:發(fā)現(xiàn)這個標(biāo)簽上有個全局樣式,對它造成了影響;
pointer-event: none
解決:將這個屬性值改為auto即可
pointer-event: auto
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue單應(yīng)用在ios系統(tǒng)中實現(xiàn)微信分享功能操作
這篇文章主要介紹了vue單應(yīng)用在ios系統(tǒng)中實現(xiàn)微信分享功能操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Vue3+TypeScript實現(xiàn)二維碼生成組件
在?Web?應(yīng)用中,生成二維碼是常見的需求,本文介紹如何用?Vue3?和?TypeScript?開發(fā)一個二維碼生成組件,支持生成圖片或?canvas?形式的二維碼,并提供豐富的配置選項,感興趣的小伙伴跟著小編一起來看看吧2024-04-04
vue+elementUI實現(xiàn)內(nèi)嵌table的方法示例
本文主要介紹了vue+elementUI實現(xiàn)內(nèi)嵌table的方法示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12
vscode中使用vue的一些插件總結(jié)(方便開發(fā))
對于很多使用vscode編寫vue項目的新手同學(xué)來說,可能不知道使用什么插件,下面這篇文章主要給大家介紹了關(guān)于vscode中使用vue的一些插件,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
vue開發(fā)runtime core中的虛擬節(jié)點示例詳解
這篇文章主要為大家介紹了vue開發(fā)runtime core中的虛擬節(jié)點示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
vue實現(xiàn)樹形結(jié)構(gòu)樣式和功能的實例代碼
這篇文章主要介紹了vue樹形結(jié)構(gòu)樣式和功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10
詳解從零搭建 vue2 vue-router2 webpack3 工程
本篇文章主要介紹了詳解從零搭建 vue2 vue-router2 webpack3 工程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11

