溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue事件修飾符native、self示例詳解

發布時間:2020-10-17 21:45:39 來源:腳本之家 閱讀:204 作者:Infinity 欄目:web開發

事出有因

之前面試被問到的native和self相關問題,self我覺得自己應該能回答出來,可能被之前一小時的問題整懵逼了。尷尬~~
自己研究了一下,不足之處望補充,相互進步

native

修飾符native,有什么用

  1. native是原生事件(第一反應,當時沒然后了...)

惡補一下

  1. native 一定是用于自定義組件,也就是自定義的html標簽

結合代碼說得明白

<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('父級')
   }
  }
 })

</script>

注意點

  1. 當<Son @click='handler1'></Son>,子組件中的this.$listeners返回的是{click: ƒ},box1的dom上沒有綁定click事件(可以打開F12查看),所以這個事件不是原生的click
  2. 當<Son @click.native='handler1'></Son>,子組件中的this.$listeners返回的是{},box1的dom上綁定了click事件(可以打開F12查看),所以這個事件是原生的click
  3. 當<Son @click.self='handler1'></Son>,子組件中的this.$listeners返回的是{click: ƒ},box1的dom上沒有綁定click事件(可以打開F12查看),所以這個事件不是原生的click
  4. 子組件的this.$emit('eventTpye')是從this.$listeners返回值中查找的

為什么有時候組件點擊事件不會生效

猜測

  • 子組件html標簽沒有定義click原生事件
  • 子組件沒有執行this.$emit('click')

所以

直接.native將事件綁定到子組件html標簽上,類似dom.addEventListener('click', handler)

self

作用

引用官方說明

<!-- 只當在 event.target 是當前元素自身時觸發處理函數 -->
<!-- 即事件不是從內部元素觸發的 -->
<div v-on:click.self="doThat">...</div>

結合代碼說明

<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,當添加self時,只有當兩者相等時才會觸發回調

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女