項目中碰到一個問題,改變一個對象的屬性,從控制台打印結果看,屬性已經發生改變,但沒有更新到視圖中
解決:使用this.$set(target,key,value);
百度解釋:向響應式對象中添加一個屬性,並確保這個新屬性同樣是響應式的,且觸發視圖更新。它必須用於向響應式對象上添加新屬性,因為 Vue 無法探測普通的新增屬性。
注:target:要更改的數據源(可以是對象或者數組); key:要更改的具體數據 value :重新賦的值
<template>
<div>
<p v-for="(item,index) in items" :key="index">{{item.message}}</p>
<button @click="changeDataHandle">更改數據</button>
</div>
</template>
<script>
export default {
data() {
return {
// 測試數據
items: [{id: '1',message: 'one'},{id: '2',message: 'two'},{id: '3',message: 'three'}],
}
},
mounted() {
this.items[0] = {id: '0',message: '測試數據'};
console.log('items==>>',this.items);//打印結果可以發現,items[0]的數據已經改變,但顯示未變
},
methods: {
// 點擊時,this.$set改變數據,顯示同時改變
changeDataHandle() {
this.$set(this.items,0,{message: '更改后的值',id: '0'});
}
}
}
</script>