VUE中Non-Props屬性的使用
定義
父組件通過(guò)在子組件上定義屬性的方式,向子組件傳遞數(shù)據(jù),但是子組件不寫(xiě)接收數(shù)據(jù)的語(yǔ)法props
子組件props接收數(shù)據(jù),但是不使用
父組件向子組件傳值,子組件通過(guò)props接收父組件傳遞過(guò)來(lái)的數(shù)據(jù),但是子組件沒(méi)有使用這個(gè)傳遞過(guò)來(lái)的數(shù)據(jù)
const app = Vue.createApp({
template:`
<div>
<counter msg='hello'/>
</div>
`
})
app.component('counter',{
props:['msg']
template:`<div>Counter</div>`
})
const vm = app.mount('#root')看下DOM結(jié)構(gòu)

子組件不寫(xiě)props
const app = Vue.createApp({
template:`
<div>
<counter msg='hello'/>
</div>
`
})
app.component('counter',{
template:`<div>Counter</div>`
})
const vm = app.mount('#root')
我們發(fā)現(xiàn),子組件的div上多了一個(gè)msg='hello'
當(dāng)使用
non-props特性的時(shí)候,也就是父組件通過(guò)給子組件上添加屬性來(lái)傳遞數(shù)據(jù),但是子組件不寫(xiě)props接收父組件傳遞過(guò)來(lái)的數(shù)據(jù)的時(shí)候,它會(huì)把父組件傳遞過(guò)來(lái)的內(nèi)容(在子組件上綁定的屬性連同值一起),放到子組件最外層的DOM標(biāo)簽上,變成子組件最外層DOM標(biāo)簽的一個(gè)屬性。
相當(dāng)于發(fā)生了這樣的過(guò)程:
子組件<div>Counter</div>
替換了
父組件引用子組件 <counter msg='hello'/>
同時(shí)將msg='hello'屬性放到子組件的DOM標(biāo)簽上了
變成了<div msg='hello>Counter</div>
子組件拒絕“被迫營(yíng)業(yè)”?
假如子組件并不想在它最外層的DOM標(biāo)簽上展示,父組件傳遞過(guò)來(lái)的屬性和值呢?
==> 那你子組件就加一個(gè)inheritAttrs: false告訴父組件吧,它的意思是“我子組件不繼承父組件傳遞過(guò)來(lái)的non-props屬性”
const app = Vue.createApp({
template:`
<div>
<counter msg='hello'/>
</div>
`
})
app.component('counter',{
inheritAttrs: false,
template:`<div>Counter</div>`
})
const vm = app.mount('#root')
嗯~,你確實(shí)做到了
實(shí)際開(kāi)發(fā)中有啥用呢?
額..,好像真的沒(méi)啥太大作用。但是當(dāng)父組件想給子組件添加style行內(nèi)樣式或者class樣式還是有用的嘛,強(qiáng)行洗白?
const app = Vue.createApp({
template:`
<div>
<counter msg='hello' style="color:red;"/>
</div>
`
})
app.component('counter',{
template:`<div>Counter</div>`
})
const vm = app.mount('#root')子組件有多個(gè)根節(jié)點(diǎn)?
結(jié)果就是non-props不會(huì)作用于任何一個(gè)節(jié)點(diǎn),以免多個(gè)節(jié)點(diǎn)"暴力爭(zhēng)搶"
const app = Vue.createApp({
template:`
<div>
<counter msg='hello' style="color:red;"/>
</div>
`
})
app.component('counter',{
template:`
<div>Counter</div>
<div>Counter</div>
<div>Counter</div>
`
})
const vm = app.mount('#root')
如果就是有“私心”,就是想指定子組件某個(gè)節(jié)點(diǎn)繼承父組件全部的non-props呢?
那就在子組件的其中一個(gè)根節(jié)點(diǎn)使用v-bind="$attrs"吧
它的意思是子組價(jià)繼承父組件上所有的non-props屬性
const app = Vue.createApp({
template:`
<div>
<counter msg='hello' msg="hello" msg2="hello2"/>
</div>
`
})
app.component('counter',{
template:`
<div>Counter</div>
<div v-bind="$attrs">Counter</div>
<div>Counter</div>
`
})
const vm = app.mount('#root')
當(dāng)然如果子組件只是想繼承父組件其中的某個(gè)non-props屬性也是可以的,畢竟“弱水三千,只取只取一瓢”,方法就是 v-bind:msg="$attrs.msg",通過(guò)在其中一個(gè)根節(jié)點(diǎn)上綁定動(dòng)態(tài)屬性(之所以加:,是因?yàn)榈忍?hào)后面是JS表達(dá)式,不是字符串)
const app = Vue.createApp({
template:`
<div>
<counter msg='hello' msg="hello" msg2="hello2"/>
</div>
`
})
app.component('counter',{
template:`
<div>Counter</div>
<div v-bind:msg="$attrs.msg">Counter</div>
<div>Counter</div>
`
})
const vm = app.mount('#root')
如何獲取Non-Props?
==> 通過(guò)this.$attrs
const app = Vue.createApp({
template:`
<div>
<counter msg='hello' msg="hello" msg2="hello2"/>
</div>
`
})
app.component('counter',{
mounted() {
console.log(this.$attrs);
},
template:`
<div>Counter</div>
<div v-bind:msg="$attrs.msg">Counter</div>
<div>Counter</div>
`
})
const vm = app.mount('#root')運(yùn)行結(jié)果

到此這篇關(guān)于VUE中Non-Props屬性的使用的文章就介紹到這了,更多相關(guān)VUE Non-Props屬性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue實(shí)現(xiàn)登錄時(shí)滑塊驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)登錄時(shí)滑塊驗(yàn)證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
vue-treeselect(適配Vue3.2)及Element-plus的TreeSelect組件使用
這篇文章主要介紹了vue-treeselect(適配Vue3.2)及Element-plus的TreeSelect組件使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
vue項(xiàng)目中使用crypto-js實(shí)現(xiàn)加密解密方式
這篇文章主要介紹了vue項(xiàng)目中使用crypto-js實(shí)現(xiàn)加密解密方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Vue頁(yè)面切換空白與刷新404問(wèn)題的深度解析
在使用?Vue.js?開(kāi)發(fā)單頁(yè)應(yīng)用?(SPA)?的過(guò)程中,開(kāi)發(fā)者經(jīng)常會(huì)遇到兩個(gè)常見(jiàn)問(wèn)題,頁(yè)面切換時(shí)出現(xiàn)短暫的空白屏幕,以及刷新頁(yè)面時(shí)返回?404?錯(cuò)誤,下面我們就來(lái)講講這兩個(gè)問(wèn)題該如何將解決吧2025-05-05
Element樹(shù)形控件el-tree懶加載并設(shè)置默認(rèn)展開(kāi)和選中的效果
本文主要介紹了Element樹(shù)形控件el-tree懶加載并設(shè)置默認(rèn)展開(kāi)和選中的效果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
vue項(xiàng)目設(shè)置scrollTop不起作用(總結(jié))
這篇文章主要介紹了vue項(xiàng)目設(shè)置scrollTop不起作用(總結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12

