解决方案1: 使用其他数据的更新带动数组的更新
解决方案2: 强制更新视图 his.$forceUpdate();
解决方案3: 调用数组的set函数更新数据, 由于视图更新的逻辑是在set函数中实现的,通过索引修改数组不会触发set函数, 所以我们手动调用set函数即可 this.$set(this.array, 1, “b”)
<body>
<script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
<div id='myApp'>
<h1>{{count}}-{{array}}-{{obj.name}}</h1>
<button @click="change">更新</button>
</div>
<script>
new Vue({
el: '#myApp',
data: {
count: 0,
array: [1,2,3,4],
obj: {name:"zhangsan", age: 20}
},
methods: {
change(){
// this.count++ ;
// this.obj.name = "lisi" ;
// this.array.push(5);
this.array[1] = "b";
// 特殊情况:
// 1, 使用数组的索引修改数组中的数据, 且数组的长度不发生变化时, 视图不会更新
this.count = this.count;
this.obj.name = "zhangsan"
// 2, 值类型数据如果更新前后值相同, 视图不更新
// 解决方案1: 使用其他数据的更新带动数组的更新
// this.obj = {name:"zhangsan", age: 20}
// 解决方案2: 强制更新视图
// this.$forceUpdate();
// 解决方案3: 调用数组的set函数更新数据, 由于视图更新的逻辑是在set函数中实现的,通过索引修改数组不会触发set函数, 所以我们手动调用set函数即可
this.$set(this.array, 1, "b")
// 相比之下, 方案三比方案二执行效率更高
}
}
})
</script>
</body>