问题:直接添加对象或者数组方法视图不会更新
<template>
<div class="home">
<div>{{ student }}</div>
<div v-for="(item, index) in items" :key="index">{{ item }}</div>
<button @click="btn()">修改</button>
</div>
</template>
<script>
export default {
name: "HelloWorld",
data() {
return {
student: {
name: "张三",
},
items: [1, 2, 3],
};
},
methods: {
btn() {
this.student.age = 18;
this.items[1] = 666;
console.log(this.student, this.items);
// 此时控制台可以正常打印出已修改的数据,但是视图不显示修改后的数据
},
},
};
</script>
正确方法:通过$set
或者Object.assign
<template>
<div class="home">
<div>{{ student }}</div>
<div v-for="(item, index) in items" :key="index">{{ item }}</div>
<button @click="btn()">修改</button>
</div>
</template>
<script>
export default {
name: "HelloWorld",
data() {
return {
student: {
name: "张三",
},
items: [1, 2, 3],
};
},
methods: {
btn() {
// -------------方法1-----------------------
this.$set(this.student, "age", 18);
this.$set(this.items, 1, 666);
console.log(this.student, this.items);
//视图正常更新
//-------------方法2--------------------------
this.student.age = 15;
this.student = Object.assign({}, this.student);
console.log(this.student, this.items);
//视图正常更新
},
},
};
</script>
下一篇
tips
tips
版权声明:《 关于添加对象或者数组元素视图不更新问题【$set/Object.assign】 》为胡光喆原创文章,转载请注明出处!
最后编辑:2022-11-1 11:11:28