欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue組件高級通訊之$attrs與$listeners

 更新時間:2023年06月25日 17:30:31   作者:扶得一人醉如蘇沐晨  
這篇文章主要為大家介紹了Vue組件高級通訊之$attrs與$listeners使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

$attrs和$listeners

我們都知道父子組件的通信可以使用props和$emit的方式,但是如果進行父子組件和孫子組件的通訊使用props和$emit的話就比較復(fù)雜了,需要層層傳遞。而,$attrs和$listeners就減少了子組件的代碼。它打通了父組件和孫組件之間的阻礙。

$attrs

官方介紹:

當(dāng)父組件傳數(shù)據(jù)給子組件的時候,如果子組件的props沒有進行接收,那數(shù)據(jù)就會被收集到子組件的$attrs里面,在子組件上使用v-bind="$attrs"可以直接將值傳給當(dāng)前組件的子組件(也就是孫組件),即使是v-model依舊可以傳遞。

默認情況下父作用域的不被認作props的attribute綁定 (attribute bindings)

將會“回退”且作為普通的 HTML attribute 應(yīng)用在子組件的根元素上。

當(dāng)撰寫包裹一個目標(biāo)元素或另一個組件的組件時,這可能不會總是符合預(yù)期行為。

通過設(shè)置 inheritAttrs 到 false,這些默認行為將會被去掉。

而通過 (同樣是 2.4 新增的) 實例 property $attrs 可以讓這些attribute生效,

且可以通過 v-bind 顯性的綁定到非根元素上。

$listeners

官方介紹:

舉例

父組件

<template>
  <div class="app">
    <h3>我是爺爺組件</h3>
    <Parent  :data1="data1" :data2="data2" :data3="data3" @fun1="fun1" @fun2="fun2"></Parent>
  </div>
</template>
<script>
import Parent from './components/Parent.vue'
export default {
  name: "App",
  components: {
    Parent
  },
  data() {
    return {
      data1: '數(shù)據(jù)1',
      data2: '數(shù)據(jù)2',
      data3: '數(shù)據(jù)3'
    }
  },
  methods: {
    fun1(val) {
      console.log('通過子組件觸發(fā)', val);
    },
    fun2(val) {
      console.log('通過子組件觸發(fā)', val);
    }
  }
}
</script>

子組件

<template>
  <div class="parent">
    <h3>我是父組件</h3>
    <Son v-bind="$attrs" v-on="$listeners"></Son>
  </div>
</template>
<script>
import Son from './Son'
export default {
//禁用將數(shù)據(jù)顯示在組件根元素的默認操作
  inheritAttrs: false,
  name: 'Parent',
  props: {
    data1: {
      type: String,
      default: ''
    }
  },
  components: {
    Son
  },
  created() {
    console.log(this.$attrs, this.$listeners, 'this.$attrs,this.$listeners');  //data2: "數(shù)據(jù)2", data3: "數(shù)據(jù)3",fun1, fun2
  },
}
</script>

孫組件

<template>
  <div class="son">
    <h3>我是子組件</h3>
    這是爺爺?shù)臄?shù)據(jù){{user}} <br>
    這是自己的數(shù)據(jù){{myUser}}<br>
    <button @click="toParent">傳遞數(shù)據(jù)給父組件</button>
  </div>
</template>
<script>
import Son from './Son'
export default {
  name: 'Son',
  components: {
    Son
  },
  props: {
  //接收父組件的數(shù)據(jù)
    data2: {
      type: String,
      default: ''
    },
    data3: {
      type: String,
      default: ''
    }
  },
  created() {
    console.log(this.data2, this.data3, '$attrs');
  },
  methods: {
    toParent() {
    //觸發(fā)父組件的方法
      this.$emit('fun1', '我是孫組件數(shù)據(jù)')
    }
  }
}
</script>

以上就是Vue組件高級通訊之$attrs與$listeners的詳細內(nèi)容,更多關(guān)于Vue組件通訊$attrs $listeners的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論