日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

vue @click.native和@click.stop和@click.self

發布時間:2023/12/18 vue 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue @click.native和@click.stop和@click.self 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考一:

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

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

2,等同于在自組件中:

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

參考二:

在事件處理器中經常需要調用?event.preventDefault()?或?event.stopPropagation()。盡管我們在方法內可以輕松做到,不過讓方法是純粹的數據邏輯而不處理 DOM 事件細節會更好。

為了解決這個問題,Vue.js 為?v-on?提供兩個?事件修飾符:.prevent?與?.stop。你是否還記得修飾符是點號打頭的指令后綴?


<!-- 阻止單擊事件冒泡 -->

<a v-on:click.stop="doThis"></a>


<!-- 提交事件不再重載頁面 -->
<form v-on:submit.prevent="onSubmit"></form>


<!-- 修飾符可以串聯 -->
<a v-on:click.stop.prevent="doThat">


<!-- 只有修飾符 -->
<form v-on:submit.prevent></form>


參考三:

<!-- 阻止單擊事件繼續傳播 -->

<a v-on:click.stop="doThis"></a>

?

<!-- 提交事件不再重載頁面 -->

<form v-on:submit.prevent="onSubmit"></form>

?

<!-- 修飾符可以串聯 -->

<a v-on:click.stop.prevent="doThat"></a>

?

<!-- 只有修飾符 -->

<form v-on:submit.prevent></form>

?

<!-- 添加事件監聽器時使用事件捕獲模式 -->

<!-- 即元素自身觸發的事件先在此處理,然后才交由內部元素進行處理 -->

<div v-on:click.capture="doThis">...</div>

?

<!-- 只當在 event.target 是當前元素自身時觸發處理函數 -->

<!-- 即事件不是從內部元素觸發的 -->

<div v-on:click.self="doThat">...</div>

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

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

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

<!-- 點擊事件將只會觸發一次 --> <a v-on:click.once="doThis"></a>

不像其它只能對原生的 DOM 事件起作用的修飾符,.once?修飾符還能被用到自定義的組件事件上。如果你還沒有閱讀關于組件的文檔,現在大可不必擔心。

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

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

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

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

參考四:

關于路由的跳轉,如果我們直接頁面使用a標簽,當然無可厚非;

但是既然是vue單頁面,那么我們就應該能使用vue自帶的組件,那就盡量去熟練它們。

頁面交互

<router-link to="/" @click.native.prevent="clickTag">test has native router-link </router-link> //在上面那種情況下,路由會跳轉到首頁,并且控制臺也會打印出<router-link to="/" @click="clickTag">test no native router-link </router-link> //在上面那種情況下,路由只會跳轉到首頁,控制臺毫無反應 //ps:@mouseover、@mouseout等等事件都如此 <script> export default {methods: {clickTag() {console.log('i am click in father.vue')}} } </script>

上面那種是vue自帶的組件情況,如果是自定義組件的話,native修飾符在我眼里,起到了節約代碼的作用。

父組件

<svg-icon icon-class="user" @click="svgClickTag"></svg-icon> //js methods部分 svgClickTag() {console.log('svg-icon click in father.vue') }

子組件:要想實現父組件內的點擊事件,子組件必須監聽點擊并觸發父組件定義的click

<svg :class="svgClass" aria-hidden="true" @click="clickSvgComponent"><use :xlink:href="iconName"></use> </svg> //js methods部分 clickSvgComponent() {this.$emit('click') }

如果有了native修飾符,那就沒有子組件什么事情了

//子組件照常寫,不作任何事件綁定,刪掉methods <svg :class="svgClass" aria-hidden="true"><use :xlink:href="iconName"></use> </svg>//父組件 <svg-icon icon-class="user" @click.native="svgClickTag"></svg-icon>

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

<el-button type="primary" style="width: 100%;" :loading="loading" @click.native.prevent="handleLogin">Sign in</el-button> //個人認為這個庫已經這某些地方把原生的click做了處理了,因為嘗試過去掉native,照常成功

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

?

?

?

總結

以上是生活随笔為你收集整理的vue @click.native和@click.stop和@click.self的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。