vue中通過(guò)使用$attrs實(shí)現(xiàn)組件之間的數(shù)據(jù)傳遞功能
組件之間傳遞數(shù)據(jù)的方式有很多種,之所以有這么多種方式,是為了滿足在不同場(chǎng)景不同條件下的使用。
一般有三種方式:
props
vuex
Vue Event Bus
本文介紹的是使用$attrs的方式。
這是$attrs的官網(wǎng)api https://cn.vuejs.org/v2/api/#vm-attrs
這個(gè)api是在2.4版本中添加的,那么為什么要添加這個(gè)特性呢?
看看官網(wǎng)是怎么解釋的
包含了父作用域中不作為 prop 被識(shí)別 (且獲取) 的特性綁定 ( class 和 style 除外)。
當(dāng)一個(gè)組件沒有聲明任何 prop 時(shí),這里會(huì)包含所有父作用域的綁定 ( class 和 style 除外),
并且可以通過(guò) v-bind="$attrs" 傳入內(nèi)部組件——在創(chuàng)建高級(jí)別的組件時(shí)非常有用。
第一次看的話真是不容易看懂,這里是既包含用法又隱晦的說(shuō)明了為什么使用,還是我來(lái)解釋一下吧。
意思就是: $attrs 可以收集父組件中的所有傳過(guò)來(lái)的屬性除了那些在組件中沒有通過(guò) props 定義的。
引申說(shuō)明一下,如果組件的嵌套層級(jí)有點(diǎn)深但又不那么深,比如三層。
我們?nèi)绻褂胮rops的話,最里面的組件想要獲取最外層組件的數(shù)據(jù),就要通過(guò)中間的組件的props來(lái)傳遞,
但是這個(gè)props對(duì)于中間的這個(gè)組件沒啥用處,它就是做了一個(gè)橋梁而已。我們平時(shí)寫代碼時(shí)候其實(shí)經(jīng)常碰到
這種場(chǎng)景,寫起來(lái)有時(shí)候覺得挺煩的。所以就有了這個(gè)$attrs來(lái)幫助我們,不必在中間組件中寫props就可以讓
最里面的組件拿到最外面組件傳進(jìn)來(lái)的數(shù)據(jù)。
那么,具體怎么使用呢?
看看下面的代碼吧,很簡(jiǎn)單就懂了
準(zhǔn)備三個(gè)組件
里面的代碼如下
//grandfather <template> <div style="background: blue"> father in grandfather <father :father-age="50" :child-time="`${time}`"></father> </div> </template> <script> import father from './father' export default { components: { father }, data () { return { time: new Date().getTime() } } } </script> //father <template> <div style="background: red"> child in father <div> <span>father age:</span>{{fatherAge}} </div> <child v-bind="$attrs"></child> </div> </template> <script> import child from './child' export default { components: { child }, props: { fatherAge: { type: Number, default: 0 } } } </script> //child<template> <div style="background: green"> <div>child</div> <div>time: {{childTime}}</div> </div> </template> <script> export default { props: { childTime: { type: String, default: '' } } } </script>
需要從爺爺組件直接傳給子組件的數(shù)據(jù),不要在父組件中的props中聲明。
在子組件上通過(guò)v-bind
的方式就可以把父組件中未聲明而子組件需要從爺爺組件中獲取的數(shù)據(jù)傳給子組件。
當(dāng)然,子組件props肯定是要聲明的,還是props的用法啦。
總結(jié)
以上所述是小編給大家介紹的vue中通過(guò)使用$attrs實(shí)現(xiàn)組件之間的數(shù)據(jù)傳遞功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
相關(guān)文章
vue表單驗(yàn)證你真的會(huì)了嗎?vue表單驗(yàn)證(form)validate
這篇文章主要介紹了vue表單驗(yàn)證你真的會(huì)了嗎?vue表單驗(yàn)證(form)validate,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04element-vue實(shí)現(xiàn)網(wǎng)頁(yè)鎖屏功能(示例代碼)
這篇文章主要介紹了element-vue實(shí)現(xiàn)網(wǎng)頁(yè)鎖屏功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11vue3路由跳轉(zhuǎn)params傳參接收不到的解決辦法
這篇文章主要給大家介紹了關(guān)于vue3路由跳轉(zhuǎn)params傳參接收不到的解決辦法,Vue3是目前前端開發(fā)中非常流行的框架之一,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06詳解vue2.0+axios+mock+axios-mock+adapter實(shí)現(xiàn)登陸
這篇文章主要介紹了詳解vue2.0+axios+mock+axios-mock+adapter實(shí)現(xiàn)登陸,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07如何使用vue-json-viewer插件展示JSON格式數(shù)據(jù)
這篇文章主要給大家介紹了關(guān)于如何使用vue-json-viewer插件展示JSON格式數(shù)據(jù)的相關(guān)資料,Vue-json-viewer是一個(gè)Vue組件,用于在Vue應(yīng)用中顯示JSON數(shù)據(jù)的可視化工具,需要的朋友可以參考下2023-11-11Vue3中Watch、Watcheffect、Computed的使用和區(qū)別解析
Watch、Watcheffect、Computed各有優(yōu)劣,選擇使用哪種方法取決于應(yīng)用場(chǎng)景和需求,watch?適合副作用操作,watchEffect適合簡(jiǎn)單的自動(dòng)副作用管理,computed?適合聲明式的派生狀態(tài)計(jì)算,本文通過(guò)場(chǎng)景分析Vue3中Watch、Watcheffect、Computed的使用和區(qū)別,感興趣的朋友一起看看吧2024-07-07Vue報(bào)錯(cuò):TypeError:Cannot create property '
這篇文章主要介紹了Vue報(bào)錯(cuò):TypeError:Cannot create property 'xxx' on string 'xxxx'問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08