如果在实例创建之后添加新的属性到实例上,它不会触发视图更新
因此比如我们修改一个数组其中的一个值,或者添加一条数据时,数据变化了,但是视图没有渲染。
例如:
<div v-for="item in items" :key="item">{{item}}</div>
<button @click="add">添加</button>
事件:
add() {
this.items[1] = 2;
console.log(this.items);
},
结果:
视图与vue检测工具上的数据都没有变,但是控制台能打印出修改后的数据
解决办法:
Vue提供了两种方法去解决
1、Vue.set( )
2、this.$set( )
两者区别在于,组件中可以直接使用this.$set( ),如果使用Vue.set( ),就要引入Vue
参数1: 要修改的对象 (数组|对象)
参数2: 属性 (数组的属性是下标|对象的属性是key(属性名))
参数3: 修改的值 (属性的值是啥)
返回值:已经修改好的值
add() {
this.$set(this.items, 1, 2)
console.log(this.items);
},
修改后的结果