$attrs官網(wǎng)介紹
關(guān)于$attrs, vue官網(wǎng)如是介紹:
包含了父作用域中不作為 prop 被識(shí)別 (且獲取) 的特性綁定 (class 和 style 除外)筒严。當(dāng)一個(gè)組件沒(méi)有聲明任何 prop時(shí)丹泉,這里會(huì)包含所有父作用域的綁定 (class 和 style 除外),并且可以通過(guò) v-bind="$attrs"傳入內(nèi)部組件——在創(chuàng)建高級(jí)別的組件時(shí)非常有用鸭蛙。
$attrs大白話介紹
attrs就是屬性的意思即attribute摹恨, js的setAttribute,?getAttribute聽(tīng)過(guò)把,jq的$().attr有用過(guò)吧娶视,他們是用來(lái)設(shè)置啥的晒哄?不就是設(shè)置類(lèi)似于title, data-x, src這類(lèi)的屬性么,由此延伸肪获,大概可知道vue實(shí)例里的this.$attrs是啥了寝凌。
再來(lái),如有一個(gè)父組件是這樣的:
如上孝赫,很明顯age, sex在子組件中可通過(guò)props來(lái)接受這些值较木,這就完成可父組件向子組件傳值,可注意寒锚,這時(shí)候props可拿不到像title與data-height的值劫映,這時(shí)候在子組件打印this.$attrs,你會(huì)發(fā)現(xiàn)是這樣子的:
這樣子就可以拿到這些屬性值啦,值得注意的是刹前,class跟style不屬于屬性值泳赋。
$atrrs深傳遞
如果有這樣一種情況呢,子組件可以通過(guò)this.$attrs的拿到父組件的屬性值喇喉,然后孫組件呢祖今,如果在子組件上面沒(méi)有定義屬性,在孫組件里打印this.$attrs其實(shí)是個(gè)控制拣技,為啥千诬?因?yàn)樽咏M件沒(méi)定義屬性啊,相要在孫組件乃至更深層的后代里拿到父組件的屬性值膏斤,可以在相應(yīng)子組件里通過(guò)v-bind="$attrs"即可傳遞父組件的屬性值至下一代子組件徐绑,若要繼續(xù)往下傳遞,相應(yīng)字組件也要添加v-bind="$attrs"
如: