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

vue使用$attrs和$listeners多級組件嵌套傳遞數(shù)據(jù)

 更新時間:2023年08月11日 11:29:17   作者:sugar_coffee  
這篇文章主要為大家介紹了vue使用$attrs和$listeners多級組件嵌套傳遞數(shù)據(jù)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

多級組件嵌套需要傳遞數(shù)據(jù)

通常使用的方法是通過vuex。如果僅僅是傳遞數(shù)據(jù),而不做中間處理,使用 vuex 處理,這就有點大材小用了。所以就有了 $attrs / $listeners ,通常配合 inheritAttrs 一起使用。

inheritAttrs:默認(rèn)值為 true。

默認(rèn)情況下父作用域的不被認(rèn)作 props 的 attribute 綁定 (attribute bindings) 將會“回退”且作為普通的 HTML attribute 應(yīng)用在子組件的根元素上。當(dāng)撰寫包裹一個目標(biāo)元素或另一個組件的組件時,這可能不會總是符合預(yù)期行為。通過設(shè)置 inheritAttrs 到 false,這些默認(rèn)行為將會被去掉。而通過 (同樣是 2.4 新增的) 實例 property $attrs 可以讓這些 attribute 生效,且可以通過 v-bind 顯性的綁定到非根元素上。查 看 官 網(wǎng)

感覺還是挺晦澀難懂的,簡單的說就是 inheritAttrs:true 繼承除props之外的所有屬性;

inheritAttrs:false 只繼承class屬性

$attrs:包含了父作用域中不被認(rèn)為 (且不預(yù)期為) props 的特性綁定 (class 和 style 除外),并且可以通過 v-bind=”$attrs” 傳入內(nèi)部組件。當(dāng)一個組件沒有聲明任何 props 時,它包含所有父作用域的綁定 (class 和 style 除外)。

$listeners:包含了父作用域中的 (不含 .native 修飾符) v-on 事件監(jiān)聽器。它可以通過 v-on=”$listeners” 傳入內(nèi)部組件。它是一個對象,里面包含了作用在這個組件上的所有事件監(jiān)聽器,相當(dāng)于子組件繼承了父組件的事件。

話不多說,咱先上栗子

father.vue 組件

<template>
   <child :name="name" :age="age" :infoObj="infoObj" @updateInfo="updateInfo" @delInfo="delInfo" />
</template>
<script>
    import Child from '../components/child.vue'
    export default {
        name: 'father',
        components: { Child },
        data () {
            return {
                name: 'Lily',
                age: 22,
                infoObj: {
                    from: '上海',
                    job: 'policeman',
                    hobby: ['reading', 'writing', 'skating']
                }
            }
        },
        methods: {
            updateInfo() {
                console.log('update info');
            },
            delInfo() {
                console.log('delete info');
            }
        }
    }
</script>

child.vue 組件

<template>
    <grand-son :height="height" :weight="weight" @addInfo="addInfo" v-bind="$attrs" v-on="$listeners"  />
    // 通過 $listeners 將父作用域中的事件,傳入 grandSon 組件,使其可以獲取到 father 中的事件
</template>
<script>
    import GrandSon from '../components/grandSon.vue'
    export default {
        name: 'child',
        components: { GrandSon },
        props: ['name'],
        data() {
          return {
              height: '180cm',
              weight: '70kg'
          };
        },
        created() {
            console.log(this.$attrs); 
       // 結(jié)果:age, infoObj, 因為父組件共傳來name, age, infoObj三個值,由于name被 props接收了,所以只有age, infoObj屬性
            console.log(this.$listeners); // updateInfo: f, delInfo: f
        },
        methods: {
            addInfo () {
                console.log('add info')
            }
        }
    }
</script>

grandSon.vue 組件

<template>
    <div>
        {{ $attrs }} --- {{ $listeners }}
    <div>
</template>
<script>
    export default {
        ... ... 
        props: ['weight'],
        created() {
            console.log(this.$attrs); // age, infoObj, height 
            console.log(this.$listeners) // updateInfo: f, delInfo: f, addInfo: f
            this.$emit('updateInfo') // 可以觸發(fā) father 組件中的updateInfo函數(shù)
        }
    }
</script>

這種方式的傳值對我來說不常用,感覺可讀性不是很好。但其對于組件層級嵌套比較深,使用props會很繁瑣,或者項目比較小,不太適合使用 Vuex 的時候,可以考慮用它。

以上就是vue使用$attrs和$listeners多級組件嵌套傳遞數(shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于vue組件嵌套傳遞數(shù)據(jù)$attrs $listeners的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 快速解決Vue項目在IE瀏覽器中顯示空白的問題

    快速解決Vue項目在IE瀏覽器中顯示空白的問題

    今天小編就為大家分享一篇快速解決Vue項目在IE瀏覽器中顯示空白的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 一文教你學(xué)會在Vue3中自定義指令

    一文教你學(xué)會在Vue3中自定義指令

    這篇文章主要為大家詳細(xì)介紹一下如何在Vue3中實現(xiàn)自定義指令,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的同學(xué)可以參考一下
    2022-07-07
  • vue?scss后綴文件background-image路徑錯誤的解決

    vue?scss后綴文件background-image路徑錯誤的解決

    這篇文章主要介紹了vue?scss后綴文件background-image路徑錯誤的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 如何利用vue+vue-router+elementUI實現(xiàn)簡易通訊錄

    如何利用vue+vue-router+elementUI實現(xiàn)簡易通訊錄

    這篇文章主要介紹了如何利用vue+vue-router+elementUI實現(xiàn)簡易通訊錄,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Antd的table組件表格的序號自增操作

    Antd的table組件表格的序號自增操作

    這篇文章主要介紹了Antd的table組件表格的序號自增操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 手把手教你如何使用Vite構(gòu)建vue項目

    手把手教你如何使用Vite構(gòu)建vue項目

    這篇文章主要介紹了如何使用Vite構(gòu)建vue項目的相關(guān)資料,本文主要介紹了Vite構(gòu)建Vue項目的詳細(xì)步驟,包括檢查node.js和pnpm的安裝,構(gòu)建Vite+Vue項目,利用HBuilderX導(dǎo)入項目,需要的朋友可以參考下
    2024-10-10
  • vue?3?effect作用與原理解析

    vue?3?effect作用與原理解析

    Vue3的Effect是其響應(yīng)式系統(tǒng)的核心,負(fù)責(zé)依賴追蹤和自動響應(yīng),它通過ReactiveEffect類封裝副作用邏輯,實現(xiàn)依賴收集和觸發(fā)更新,本文介紹vue?3?effect作用與原理解析,感興趣的朋友一起看看吧
    2025-02-02
  • Vue.js中v-for指令的用法介紹

    Vue.js中v-for指令的用法介紹

    這篇文章介紹了Vue.js中v-for指令的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • vue中插值表達(dá)式使用的示例詳解

    vue中插值表達(dá)式使用的示例詳解

    Vue的插值表達(dá)式是一種特殊的語法,用于在模板中動態(tài)地將數(shù)據(jù)綁定到視圖中,一般使用雙大括號 ("{{ }}")將表達(dá)式包裹起來,下面我們就來根據(jù)三個案例來深入了解下插值表達(dá)式的使用吧
    2023-11-11
  • Vue3項目打包并部署到Nginx實踐

    Vue3項目打包并部署到Nginx實踐

    本文介紹了如何安裝Nginx并部署Vue項目,首先從官網(wǎng)下載Nginx并啟動服務(wù),然后使用Vite構(gòu)建Vue項目,將構(gòu)建好的dist文件夾部署到Nginx目錄下,并修改nginx.conf文件以防止刷新頁面時出現(xiàn)404錯誤,最后,總結(jié)了刷新頁面空白問題的解決方法
    2026-01-01

最新評論

都江堰市| 满城县| 门源| 宁远县| 雅江县| 遂川县| 瑞丽市| 剑阁县| 且末县| 宜春市| 项城市| 汉中市| 惠安县| 阳曲县| 县级市| 娄底市| 新和县| 屏南县| 清涧县| 九龙坡区| 皋兰县| 太原市| 保定市| 离岛区| 沙雅县| 昭苏县| 平湖市| 教育| 滁州市| 宜丰县| 东至县| 孟津县| 隆回县| 宜兰市| 邯郸县| 宣化县| 元阳县| 彩票| 贵德县| 高陵县| 迁安市|