Vue動(dòng)態(tài)添加屬性到data的實(shí)現(xiàn)
一、場(chǎng)景例子
<body>
<div id="app">
<p v-for="(value,key) in item" :key="key">
{{value}}
</p>
<button @click="addProperty">動(dòng)態(tài)添加新屬性</button>
</div>
</body>
</html>
<script>
new Vue({
el:'#app',
data:{
item:{
oldProperty:"舊屬性"
}
},
methods: {
addProperty(){
this.item.newProperty = "新屬性";
console.log(this.item);
}
},
})
</script>效果:點(diǎn)擊按鈕后,輸出的結(jié)果中有新添加的新屬性,但是頁(yè)面沒有顯示新屬性。

二、原理分析
vue2使用Object.defineProperty實(shí)現(xiàn)數(shù)據(jù)響應(yīng)式;
const obj = {}
Object.defineProperty(obj, 'foo', {
get() {
console.log(`get foo:${val}`);
return val
},
set(newVal) {
if (newVal !== val) {
console.log(`set foo:${newVal}`);
val = newVal
}
}
})
}- 當(dāng)訪問foo屬性,或者設(shè)置foo值的時(shí)候都能觸發(fā)setter與getter;
- 但是為obj添加新屬性的時(shí)候,卻無法觸發(fā)事件屬性的攔截
bj.bar = '新屬性'
原因是一開始o(jì)bj的foo屬性被設(shè)成了響應(yīng)式數(shù)據(jù),而bar是后面新增的屬性,并沒有通過Object.defineProperty設(shè)置成響應(yīng)式數(shù)據(jù)
三、解決方案
有三種解決方案:
- Vue.set()
- Object.assign()
- $forcecUpdated()
常用的就是Vue.set(),語法為:Vue.set( target, propertyName/index, value )
<script>
new Vue({
el:'#app',
data:{
item:{
oldProperty:"舊屬性"
}
},
methods: {
addProperty(){
Vue.set(this.item,"newProperty","新屬性")
console.log(this.item);
}
},
})
</script>
到此這篇關(guān)于Vue動(dòng)態(tài)添加屬性到data的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Vue動(dòng)態(tài)添加屬性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue實(shí)現(xiàn)簡(jiǎn)易計(jì)算器
這篇文章主要為大家詳細(xì)介紹了用Vue制作的簡(jiǎn)易計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
詳解vue結(jié)合el-table實(shí)現(xiàn)表格小計(jì)總計(jì)需求(summary-method)
這篇文章主要介紹了vue結(jié)合el-table實(shí)現(xiàn)表格小計(jì)總計(jì)需求(summary-method),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01
el-form-item?prop屬性動(dòng)態(tài)綁定不生效問題及解決
這篇文章主要介紹了el-form-item?prop屬性動(dòng)態(tài)綁定不生效問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
詳解vue-cli 構(gòu)建Vue項(xiàng)目遇到的坑
本篇文章主要介紹了詳解vue-cli 構(gòu)建Vue項(xiàng)目遇到的坑,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08
vue項(xiàng)目引入antDesignUI組件實(shí)現(xiàn)
本文介紹了如何以Vue引入antDesignUI,主要包括下載安裝、配置和引入組件等步驟,通過本文,讀者可以快速了解antDesignUI在Vue中的應(yīng)用,感興趣的可以了解一下2023-08-08
基于Vue2x實(shí)現(xiàn)響應(yīng)式自適應(yīng)輪播組件插件VueSliderShow功能
本文講述的是從開發(fā)一款基于Vue2x的響應(yīng)式自適應(yīng)輪播組件插件的一個(gè)全過程,包含發(fā)布到npm,構(gòu)建自己的npm包,供下載安裝使用的技巧,非常不錯(cuò),具有一定的參考借鑒價(jià)值,感興趣的朋友跟隨腳本之家小編一起看看吧2018-05-05

