国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記錄--@click和@click.native有什么區(qū)別,如何阻止第三方組件內部的冒泡

這篇具有很好參考價值的文章主要介紹了記錄--@click和@click.native有什么區(qū)別,如何阻止第三方組件內部的冒泡。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助

記錄--@click和@click.native有什么區(qū)別,如何阻止第三方組件內部的冒泡

一.@click和@click.native的區(qū)別

vue @click.native 原生點擊事件:

1,給vue組件綁定事件時候,必須加上native ,不然不會生效(監(jiān)聽根元素的原生事件,使用 .native 修飾符)

2,等同于在子組件中:

子組件內部處理click事件然后向外發(fā)送click事件:$emit("click".fn)

不多說看代碼:

直接在封裝組件上使用@click,看看有什么效果

封裝組件wrap-component.vue

?<template>
? ?<button>封裝組件的點擊事件</button>
?</template>
??
?<script>
?export default {
? ?name: 'wrapComponent'
?}
?</script>
??
?<style>
??
?</style>
使用封裝組件HomeView.vue
?<template>
? ?<div class="home">
? ? ?<h2>父組件</h2>
??
? ? ?<wrap-component @click="handleClick"></wrap-component>
? ?</div>
?</template>
??
?<script>
?import wrapComponent from '@/components/wrap-component.vue'
??
?export default {
? ?name: 'HomeView',
? ?components: {
? ? ?wrapComponent
?  },
? ?methods: {
? ? ?handleClick () {
? ? ? ?console.log('點擊了封裝組件的按鈕')
? ?  }
?  }
?}
?</script>
??

頁面效果

記錄--@click和@click.native有什么區(qū)別,如何阻止第三方組件內部的冒泡

點擊按鈕,控制臺并沒有打印內容

當我們給封裝組件中的按鈕添加點擊事件

?<template>
? ?<button @click="handleClick">封裝組件的點擊事件</button>
?</template>
??
?<script>
?export default {
? ?name: 'wrapComponent',
? ?methods: {
? ? ?handleClick () {
? ? ? ?this.$emit('click')
? ?  }
?  }
?}
?</script>
??
?<style>
??
?</style>

頁面效果

記錄--@click和@click.native有什么區(qū)別,如何阻止第三方組件內部的冒泡

發(fā)現控制臺打印了內容,說明觸發(fā)了封裝組件內部的按鈕的點擊事件

當我們使用@click.native呢?

封裝組件wrap-component.vue

?<template>
? ?<button>封裝組件的點擊事件</button>
?</template>
??
?<script>
?export default {
? ?name: 'wrapComponent'
?}
?</script>
??
?<style>
??
?</style>

使用封裝組件HomeView.vue

?<template>
? ?<div class="home">
? ? ?<h2>父組件</h2>
??
? ? ?<wrap-component @click.native="handleClick"></wrap-component>
? ?</div>
?</template>
??
?<script>
?import wrapComponent from '@/components/wrap-component.vue'
??
?export default {
? ?name: 'HomeView',
? ?components: {
? ? ?wrapComponent
?  },
? ?methods: {
? ? ?handleClick () {
? ? ? ?console.log('點擊了封裝組件的按鈕')
? ?  }
?  }
?}
?</script>
??

頁面效果

記錄--@click和@click.native有什么區(qū)別,如何阻止第三方組件內部的冒泡

也打印了內容,說明與上面通過子組件$emit出來一樣。

那可以把@click.native當作是上面$emit的簡寫嗎?

當我們給封裝組件添加其他內容呢?

封裝組件wrap-component.vue

?<template>
? ?<div>
? ? ?<button>封裝組件的點擊事件</button>
? ? ?<ul>
? ? ? ?<li>測試</li>
? ? ? ?<li>測試</li>
? ? ? ?<li>測試</li>
? ? ? ?<li>測試</li>
? ? ?</ul>
? ?</div>
?</template>
??
?<script>
?export default {
? ?name: 'wrapComponent',
? ?methods: {
?  }
?}
?</script>
??
?<style>
??
?</style>
??

頁面效果:

記錄--@click和@click.native有什么區(qū)別,如何阻止第三方組件內部的冒泡

點擊封裝組件的任意一個區(qū)域都可以打印內容。

說明@click.native并不是通過$emit方式的簡寫,在只有單個元素點擊事件的情況下可以當作是。

native就是把組件變回原生DOM的一種方式,相當于給組件綁定原生事件

特別說明

針對vue-element-ui中的el-button

?//這個庫已經在某些地方把原生的click做了處理了,因為不使用native,照常成功
?<el-button type="primary" @click="handleLogin">Sign in</el-button>

二.其他修飾符

在事件處理器中可以使用event.preventDefault()(阻止原生事件), event.stopPropagation()(阻止事件冒泡)。 vue.js為 v-on 提供兩個 事件修飾符:.prevent 與 .stop,讓html就可以實現這兩個功能,不需要再在js中單獨寫

?<!-- 阻止單擊事件繼續(xù)傳播 -->
?<a v-on:click.stop="doThis"></a>
??
?<!-- 提交事件不再重載頁面 -->
?<form v-on:submit.prevent="onSubmit"></form>
??
?<!-- 修飾符可以串聯 -->
?<a v-on:click.stop.prevent="doThat"></a>
??
?<!-- 添加事件監(jiān)聽器時使用事件捕獲模式 -->
?<!-- 即元素自身觸發(fā)的事件先在此處理,然后才交由內部元素進行處理 -->
?<div v-on:click.capture="doThis">...</div>
??
?<!-- 只當在 event.target 是當前元素自身時觸發(fā)處理函數 -->
?<!-- 即事件不是從內部元素觸發(fā)的 -->
?<div v-on:click.self="doThat">...</div>

使用修飾符時,順序很重要;相應的代碼會以同樣的順序產生。因此,

用?v-on:click.prevent.self?會阻止所有的點擊,

而?v-on:click.self.prevent?只會阻止對元素自身的點擊

?<!-- 點擊事件將只會觸發(fā)一次 -->
?<a v-on:click.once="doThis"></a>
??
?<!-- 不像其它只能對原生的 DOM 事件起作用的修飾符,.once 修飾符還能被用到自定義的組件事件上,該處理函數只會觸發(fā)一次 -->
?<wrap-component @click.native.once="clickTree"></wrap-component>

不像其它只能對原生的 DOM 事件起作用的修飾符,.once?修飾符還能被用到自定義的組件事件上。

Vue 還對應?addEventListener 中的 passive 選項提供了 .passive 修飾符。

?<!-- 滾動事件的默認行為 (即滾動行為) 將會立即觸發(fā) -->
?<!-- 而不會等待 `onScroll` 完成  -->
?<!-- 這其中包含 `event.preventDefault()` 的情況 -->
?<div v-on:scroll.passive="onScroll">...</div>

這個 .passive 修飾符尤其能夠提升移動端的性能。

不要把 .passive.prevent 一起使用,因為 .prevent 將會被忽略,同時瀏覽器可能會向你展示一個警告。請記住,.passive 會告訴瀏覽器你不想阻止事件的默認行為。

使用@click.native.stop來阻止第三方組件的點擊事件

場景

在父組件中有一個點擊事件,但是在父組件內部又使用其他三方組件,因為是第三方組件所以不能通過在第三方組件內部通過@click.stop的方式來阻止冒泡?,F在希望的情況就是,在點擊第三方組件封裝的點擊事件的時候,不想讓其冒泡其父組件,觸發(fā)父組件的點擊事件。

場景代碼

父組件HomeView.vue

?<template>
? ?<div class="home" @click="handleParentClick">
? ? ?<h2>父組件</h2>
??
? ? ?<div>
? ? ? ?<wrap-component></wrap-component>
? ? ?</div>
? ?</div>
?</template>
??
?<script>
?import wrapComponent from '@/components/wrap-component.vue'
??
?export default {
? ?name: 'HomeView',
? ?components: {
? ? ?wrapComponent
?  },
? ?methods: {
? ? ?handleParentClick () {
? ? ? ?console.log('觸發(fā)了父組件的點擊事件')
? ?  }
?  }
?}
?</script>

封裝組件wrap-component.vue

?<template>
? ?<div @click="handleSonClick">
? ? ?<button>封裝組件的點擊事件</button>
? ? ?<ul>
? ? ? ?<li>測試</li>
? ? ? ?<li>測試</li>
? ? ? ?<li>測試</li>
? ? ? ?<li>測試</li>
? ? ?</ul>
? ?</div>
?</template>
??
?<script>
?export default {
? ?name: 'wrapComponent',
? ?methods: {
? ? ?handleSonClick () {
? ? ? ?console.log('觸發(fā)了封裝組件的點擊事件')
? ?  }
?  }
?}
?</script>
??
?<style>
??
?</style>

頁面效果

記錄--@click和@click.native有什么區(qū)別,如何阻止第三方組件內部的冒泡

觸發(fā)了封裝組件的點擊事件,也冒泡到了父組件,觸發(fā)了父組件的點擊事件

解決

在第一點的時候,介紹了native的作用,它把組件變回原生DOM的一種方式,相當于給組件綁定原生事件,那我們可以直接在組件上使用@click.native.stop來阻止第三方組件內部點擊事件的冒泡嗎?

父組件HomeView.vue

?<template>
? ?<div class="home" @click="handleParentClick">
? ? ?<h2>父組件</h2>
??
? ? ?<div>
? ? ? ?<wrap-component @click.native.stop></wrap-component>
? ? ?</div>
? ?</div>
?</template>
??
?<script>
?import wrapComponent from '@/components/wrap-component.vue'
??
?export default {
? ?name: 'HomeView',
? ?components: {
? ? ?wrapComponent
?  },
? ?methods: {
? ? ?handleParentClick () {
? ? ? ?console.log('觸發(fā)了父組件的點擊事件')
? ?  }
?  }
?}
?</script>
??

果然是可以的

擴展

一個組件的話可以通過上面描述的方式來解決,如果父組件有多個第三方組件呢,難道要給每個組件添加@click.native.stop嗎?如果不閑麻煩的話,當然是可以的。

也有更加簡便的方法

父組件HomeView.vue

?<template>
? ?<div class="home" @click="handleParentClick">
? ? ?<h2>父組件</h2>
??
? ? ?<div @click.stop>
? ? ? ?<wrap-component></wrap-component>
? ? ? ?<wrap-demo></wrap-demo>
? ? ?</div>
? ?</div>
?</template>
??
?<script>
?import wrapComponent from '@/components/wrap-component.vue'
?import wrapDemo from '@/components/wrap-demo.vue'
??
?export default {
? ?name: 'HomeView',
? ?components: {
? ? ?wrapComponent,
? ? ?wrapDemo
?  },
? ?methods: {
? ? ?handleParentClick () {
? ? ? ?console.log('觸發(fā)了父組件的點擊事件')
? ?  }
?  }
?}
?</script>
??

把使用第三方組件統(tǒng)一包裹起來,對其div使用@click.stop來阻止冒泡

總結

  1. @click.native就是把組件變回原生DOM的一種方式,相當于給組件綁定原生點擊事件。
  2. 可以通過這個機制來阻止第三方組件內部封裝的冒泡
  3. 如果是直接綁定在原生的div之類的元素上的話,是不需要使用.native的,通常只需要用其他幾個后綴。
  4. .native是用來阻止原生的dom事件,一般想要阻止組件內原生的dom事件就需要用.native搭配其他后綴來實現
  5. @click.stop阻止組件$emit的click事件
  6. @click.native.stop阻止組件內原生的dom的click事件

本文轉載于:

https://juejin.cn/post/7274883755478335546

如果對您有所幫助,歡迎您點個關注,我會定時更新技術文檔,大家一起討論學習,一起進步。

?記錄--@click和@click.native有什么區(qū)別,如何阻止第三方組件內部的冒泡文章來源地址http://www.zghlxwxcb.cn/news/detail-695934.html

到了這里,關于記錄--@click和@click.native有什么區(qū)別,如何阻止第三方組件內部的冒泡的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Flutter 與第三方 Native-SDK 的交互代理方案

    Flutter 與第三方 Native-SDK 的交互代理方案

    場景 在使用 Flutter 進行功能模塊或者整體項目的開發(fā)時,如果需要(階段性)頻繁地和某個第三方 Native-SDK 進行交互,而該 Native-SDK 沒有實現 Flutter 插件版本的情況下,如果直接把這部分交互 API 加入到原有的 channel 類里面,會使得該 channel 類變得臃腫,造成代碼維護及迭代

    2024年02月02日
    瀏覽(23)
  • Python第三方庫安裝教程、什么是第三方庫

    Python有一個全球社區(qū):https://pypi.org/,在這里我們可以搜索任何主題的Python第三方庫。PyPI全稱是Python Package Index,指的是Python包的索引,它由PSF(Python Software Foundation)來維護,并且展示全球Python計算生態(tài)。 我們需要學會利用PyPI的主站檢索,找到我們使用和關心的Python第三方

    2024年02月03日
    瀏覽(94)
  • 什么是第三方支付?

    什么是第三方支付?

    中央銀行官方解讀:是一些與產品所在國和主要外資銀行簽訂合同、具有一定實力和信譽保證的第三方獨立機構提供的交易支持平臺。在通過第三方支付平臺進行的交易中,在買方購買貨物后,買方使用第三方平臺提供的賬戶支付貨物,第三方將付款和交貨的到達通知賣方;

    2024年02月06日
    瀏覽(21)
  • 什么是第三方物流(3PL)?

    什么是第三方物流(3PL)?

    第三方物流是將供應鏈運營和物流外包,以將公司的產品提供給客戶。第三方物流提供的物流解決方案包括接收、存儲、包裝和運輸服務。一些第三方物流公司還提供其他物流服務,稱為增值服務。這些包括庫存管理、配套和組裝、延期包裝、采購和其他。 由于第三方物流服

    2024年02月16日
    瀏覽(24)
  • 學習記錄654@搞定python安裝TA-Lib第三方庫

    學習記錄654@搞定python安裝TA-Lib第三方庫

    TA-Lib是量化投資比較重要的一個包,用于生成技術指標,比如均線,MACD,RSI等,安裝還是遇到點小問題。 首先我去 https://pypi.org/project/TA-Lib/ 官方的第三方庫網址倒找這個包,然后按照他的提示進行下載,是的,使用的是很暴力的方式: pip install TA-Lib 很遺憾,報錯: ERROR:

    2024年02月04日
    瀏覽(98)
  • Vue:@click.stop -- 阻止事件向父級元素傳遞

    最近遇到這么一個問題:有一個父div,包含一個子div。要求單擊父div時執(zhí)行fun()函數,而單擊子div時不執(zhí)行fun()函數。 可以使用 @click.stop 阻止事件向父級元素傳遞 在Vue中, @click 是一個指令,用于監(jiān)聽元素的點擊事件。 @click.stop 是其中的一個修飾符,它的作用是阻止事件冒泡

    2024年02月11日
    瀏覽(23)
  • 電商物流第三方云倉到底是什么?

    倉庫能夠簡單地定義為一個規(guī)劃空間,通常是一個用于處置和貯存貨物的大型商業(yè)建筑。因而,倉儲是指在這樣一個規(guī)劃空間中存儲和處置貨物所觸及的一切過程。倉庫中常見的貨物包括:;機械零配件、建筑資料、廢品農產品、家具和電子產品。倉庫中的一些活動包括接納貨

    2024年02月01日
    瀏覽(22)
  • Chrome禁用第三方Cookie,有什么影響?

    Chrome禁用第三方Cookie,有什么影響?

    2024年,Chrome將要正式禁用第三方Cookie了,這個變化對Web開發(fā)者來說是非常重要的,因為它將改變開發(fā)者如何設計網站以及如何搜集和使用用戶數據。這是怎么一回事,到底有什么具體影響? 隨著互聯網技術的發(fā)展,我們的生活變得越來越數字化,網上購物、社交、閱讀新聞

    2024年02月02日
    瀏覽(16)
  • 銀聯在線支付、第三方快捷支付三種快捷支付模式有何區(qū)別?

    銀聯在線支付是中國銀聯聯合各家商業(yè)銀行共同打造的銀行卡轉接清算平臺,涵蓋四種支付方式:認證支付、快捷支付、儲值卡支付和網銀支付,無需開通網銀; 代扣是用戶通過線上或線下柜臺方式簽署“用戶-授權商戶-銀行”的三方協議,在協議期內,授權商戶可以直接從

    2024年02月11日
    瀏覽(90)
  • Vue中@click.native的使用

    一、@click.native 是什么? @click.native是 Vue 中用于監(jiān)聽原生 DOM 事件的一種方式。 通常情況下,我們在組件上使用 @click 監(jiān)聽點擊事件時,實際上是監(jiān)聽了組件內部封裝的一個模擬點擊事件,并不是真正的原生點擊事件。 而使用 @click.native 可以直接監(jiān)聽原生的點擊事件,不需要

    2024年02月06日
    瀏覽(10)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包