后端参与前端开发的小白,在开发过程当中遇到了以下状况:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,若是更新此属性的值,是不会更新视图的。前端
官方文档中是这样描述的:若是在实例建立以后添加新的属性到实例上,它不会触发视图更新。vue
官方给出了以下解决方案:react
Vue 不容许在已经建立的实例上动态添加新的根级响应式属性 (root-level reactive property)。然而它能够使用 Vue.set(object, key, value) 方法将响应属性添加到嵌套的对象上:后端
Vue.set(vm.obj, 'e', 0)
您还能够使用 vm.$set 实例方法,这也是全局 Vue.set 方法的别名:数组
this.$set(this.obj,'e',02)
例以下面两种状况:this
举个例子:prototype
var vm = new Vue({ data: { items: ['a', 'b', 'c'] } }) vm.items[1] = 'x' // 不是响应性的 vm.items.length = 2 // 不是响应性的
为了解决第一类问题,如下两种方式均可以实现和 vm.items[indexOfItem] = newValue 相同的效果,同时也将触发状态更新:code
// Vue.set Vue.set(vm.items, indexOfItem, newValue) // Array.prototype.splice vm.items.splice(indexOfItem, 1, newValue)
你也能够使用 vm.$set 实例方法,该方法是全局方法 Vue.set 的一个别名:对象
vm.$set(vm.items, indexOfItem, newValue)
为了解决第二类问题,你能够使用 splice:索引
vm.items.splice(newLength)