在解决问题以前,咱们先来了解下 vue响应性原理: Vue最显著的一个功能是响应系统-- 模型只是一个普通对象,修改对象则会更新视图。
受到javascript的限制,Vue不能检测到对象属性的添加或删除,由于vue在初始化实列时将属性转为getter/setter,因此属性必须在data对象上才能让vue转换它。
可是vue能够使用 Vue.set(object, key, value)方法将响应属性添加到嵌套的对象上javascript
vue是经过检测get,set才得知数据是否更新的,而对于数组来讲,是没有get,set方法的,因此须要咱们本身手动触发,须要发送消息通知vuevue
1.对象或数组里的某个值改变,视图不刷新,能够考虑将改变的值存在 data变量里java
2.对象改变动新视图的方法:api
a.使用 Object.assign数组
this.$data.items = Object.assign({}, this.$data.items);this
b.使用Vue.set(object, key, value)方法将响应属性添加到嵌套的对象上spa
Vue.set(obj, '_isHover', true); 或者能够使用vm.$set的实列方法,也是Vue.set方法的别名:
this.$set(this.$data.items[index], '_isHover', false);
3.改变数组中对象更新视图的方法
Vue.set(
this
.contents, index,
this
.contents[index]);