" />

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

詳解Vue中$props、$attrs和$listeners的使用方法

 更新時間:2021年12月31日 15:40:03   作者:等風(fēng)來呀  
本文主要介紹了Vue中$props、$attrs和$listeners的使用詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

背景

現(xiàn)在我們來討論一種情況,父組件與孫子組件怎么通信,我們有多少種解決方案?

  • 我們使用VueX來進行數(shù)據(jù)管理,但是如果項目中多個組件共享狀態(tài)比較少,項目比較小,并且全局狀態(tài)比較少,那使用VueX來實現(xiàn)該功能,并沒有發(fā)揮出VueX的威力。
  • 使用B來做中轉(zhuǎn)站,當(dāng)A組件需要把信息傳給C組件時,B接受A組件的信息,然后利用屬性傳給C組件, 這是一種解決方案,但是如果嵌套的組件過多,會導(dǎo)致代碼繁瑣,代碼維護比較困難;如果C中狀態(tài)的改變需要傳遞給A, 使用事件系統(tǒng)一級級往上傳遞 。
  • 自定義一個Vue 中央數(shù)據(jù)總線,這個情況適合碰到組件跨級傳遞消息,但是缺點是 碰到多人合作時,代碼的維護性較低,代碼可讀性低

一、文檔描述

(1)$props:當(dāng)前組件接收到的 props 對象。Vue 實例代理了對其 props 對象屬性的訪問。

(2)$attrs:包含了父作用域中不作為 prop 被識別 (且獲取) 的特性綁定 (class 和 style 除外)。

(3)$listeners:包含了父作用域中(不含 .native 修飾器的)v-on事件監(jiān)聽器。他可以通過 v-on="listeners"傳入內(nèi)部組件

二、具體使用

1、父組件

<template>
  <div>
    <div>父親組件</div>
    <Child
      :foo="foo"
      :zoo="zoo"
      @handle="handleFun"
    >
    </Child>
  </div>
</template>

<script>
import Child from './Child.vue'
export default {
  components: { Child },
  data() {
    return {
      foo: 'foo',
      zoo: 'zoo'
    }
  },
  methods: {
    // 傳遞事件
    handleFun(value) {
      this.zoo = value
      console.log('孫子組件發(fā)生了點擊事件,我收到了')
    }
  }
}
</script>

2. 兒子組件(Child.vue)

中間層,作為父組件和孫子組件的傳遞中介,在兒子組件中給孫子組件添加v-bind="$attrs",這樣孫子組件才能接收到數(shù)據(jù)。

$attrs是從父組件傳過來的,且兒子組件未通過props接收的數(shù)據(jù),例如zoo

<template>
  <div class='child-view'>
    <p>兒子組件--{{$props.foo}}與{{foo}}內(nèi)容一樣</p>
    <GrandChild v-bind="$attrs" v-on="$listeners"></GrandChild>
  </div>
</template>

<script>
import GrandChild from './GrandChild.vue'
export default {
  // 繼承所有父組件的內(nèi)容
  inheritAttrs: true,
  components: { GrandChild },
  props: ['foo'],
  data() {
    return {
    }
  }
}
</script>

3. 孫子組件(GrandChild.vue)

在孫子組件中一定要使用props接收從父組件傳遞過來的數(shù)據(jù)

<template>
  <div class='grand-child-view'>
    <p>孫子組件</p>
    <p>傳給孫子組件的數(shù)據(jù):{{zoo}}</p>
    <button @click="testFun">點我觸發(fā)事件</button>
  </div>
</template>

<script>
export default {
  // 不想繼承所有父組件的內(nèi)容,同時也不在組件根元素dom上顯示屬性
  inheritAttrs: false,
  // 在本組件中需要接收從父組件傳遞過來的數(shù)據(jù),注意props里的參數(shù)名稱不能改變,必須和父組件傳遞過來的是一樣的
  props: ['zoo'],
  methods: {
    testFun() {
      this.$emit('handle', '123')
    }
  }
}
</script>

三、總結(jié)

從上面的代碼,可以看出使用attrs、inheritAttrs屬性 能夠使用簡潔的代碼,將A組件的數(shù)據(jù)傳遞給C組件,該場景的使用范圍還是挺廣的。

通過listeners,我們在b組件上 綁定 v-on=”$listeners”, 在a組件中,監(jiān)聽c組件觸發(fā)的事件。就能把c組件發(fā)出的數(shù)據(jù),傳遞給a組件。

到此這篇關(guān)于詳解Vue中$props、$attrs和$listeners的使用方法的文章就介紹到這了,更多相關(guān)Vue $props、$attrs和$listeners內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解vue為什么要求組件模板只能有一個根元素

    詳解vue為什么要求組件模板只能有一個根元素

    這篇文章主要介紹了vue為什么要求組件模板只能有一個根元素,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-07-07
  • Vue3導(dǎo)出pdf文件詳細方案

    Vue3導(dǎo)出pdf文件詳細方案

    這篇文章主要給大家介紹了關(guān)于Vue3導(dǎo)出pdf文件的相關(guān)資料,最近項目有個需求,將系統(tǒng)統(tǒng)計的數(shù)據(jù)生成分析報告,然后可以導(dǎo)出成PDF,這里給大家總結(jié)下,需要的朋友可以參考下
    2023-08-08
  • 基于Vue3和Plotly.js實現(xiàn)交互式3D圖

    基于Vue3和Plotly.js實現(xiàn)交互式3D圖

    這篇文章主要介紹了基于Vue3和Plotly.js實現(xiàn)交互式3D圖,本代碼旨在為數(shù)據(jù)可視化提供一個交互式圖表,允許用戶動態(tài)控制圖表中線條的顏色和可見性,此功能對于探索大型數(shù)據(jù)集或突出特定數(shù)據(jù)子集非常有用,需要的朋友可以參考下
    2024-07-07
  • Vue3集成Element-plus快速搭建頁面框架的過程

    Vue3集成Element-plus快速搭建頁面框架的過程

    ElementPlus是一款基于Vue3的UI組件庫,提供了豐富的組件和響應(yīng)式設(shè)計,易于使用和主題定制,在Vue3項目中集成ElementPlus,需要通過npm安裝并引入組件,主題色可以通過修改樣式文件進行全局設(shè)置,本文介紹Vue3集成Element-plus快速搭建頁面框架,感興趣的朋友一起看看吧
    2025-03-03
  • 詳解Vue組件如何正確引用和使用外部方法

    詳解Vue組件如何正確引用和使用外部方法

    在開發(fā)Vue應(yīng)用時,我們經(jīng)常需要在多個組件中復(fù)用一些通用的函數(shù)或方法,這些函數(shù)可能是我們自己編寫的工具函數(shù),也可能是從第三方庫中導(dǎo)入的,下面我們就來看看如何正確引用和使用外部方法吧
    2024-01-01
  • 超簡單的Vue.js環(huán)境搭建教程

    超簡單的Vue.js環(huán)境搭建教程

    這篇文章主要為大家分享了一份超簡單的Vue.js環(huán)境搭建教程,幫助大家快速搭建vue環(huán)境,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Vue 中的受控與非受控組件的實現(xiàn)

    Vue 中的受控與非受控組件的實現(xiàn)

    這篇文章主要介紹了Vue 中的受控與非受控組件的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • vue如何實現(xiàn)對請求參數(shù)進行簽名

    vue如何實現(xiàn)對請求參數(shù)進行簽名

    這篇文章主要介紹了vue如何實現(xiàn)對請求參數(shù)進行簽名問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vue2.0 實現(xiàn)移動端圖片上傳功能

    Vue2.0 實現(xiàn)移動端圖片上傳功能

    本文主要介紹VUE2.0圖片上傳功能的實現(xiàn)。原理是通過js控制和input標(biāo)簽的方式完成這一效果,無需加載其他組件。具體實例大家大家參考下本文
    2018-05-05
  • vuepress打包之后頁面樣式丟失問題的兩種解決方式

    vuepress打包之后頁面樣式丟失問題的兩種解決方式

    這篇文章主要介紹了vuepress打包之后頁面樣式丟失問題的兩種解決方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論