在解決問題以前,咱們先來了解下 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]);