最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2019年07月09日 17:08:31   作者:Infinity  
這篇文章主要給大家介紹了關(guān)于Vue事件修飾符native、self的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

事出有因

之前面試被問到的native和self相關(guān)問題,self我覺得自己應(yīng)該能回答出來,可能被之前一小時(shí)的問題整懵逼了。尷尬~~
自己研究了一下,不足之處望補(bǔ)充,相互進(jìn)步

native

修飾符native,有什么用

  1. native是原生事件(第一反應(yīng),當(dāng)時(shí)沒然后了...)

惡補(bǔ)一下

  1. native 一定是用于自定義組件,也就是自定義的html標(biāo)簽

結(jié)合代碼說得明白

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

</script>

注意點(diǎn)

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

為什么有時(shí)候組件點(diǎn)擊事件不會(huì)生效

猜測

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

所以

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

self

作用

引用官方說明

<!-- 只當(dāng)在 event.target 是當(dāng)前元素自身時(shí)觸發(fā)處理函數(shù) -->
<!-- 即事件不是從內(nèi)部元素觸發(fā)的 -->
<div v-on:click.self="doThat">...</div>

結(jié)合代碼說明

<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,當(dāng)添加self時(shí),只有當(dāng)兩者相等時(shí)才會(huì)觸發(fā)回調(diào)

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論

永新县| 沾化县| 深泽县| 珠海市| 龙海市| 台东县| 三门县| 乌苏市| 时尚| 攀枝花市| 同仁县| 军事| 石屏县| 长丰县| 报价| 青川县| 黔西县| 新丰县| 淄博市| 德格县| 连城县| 库尔勒市| 荆州市| 陆良县| 巴彦县| 广宁县| 江川县| 阿拉尔市| 突泉县| 大石桥市| 海宁市| 驻马店市| 石城县| 西峡县| 莱阳市| 信丰县| 乌兰县| 盘山县| 高州市| 镇安县| 嘉定区|