问题:当我们对数组进行简单的更改的时候,发现可以在用console打印在控制台,但是并不能在页面改变其值。
let arr= ['改变','不改变']
arr[1] = '我想被改变'
console.log(arr[1]) //可以看到控制台上被改变,但是页面上并没有更新
原因:由于 JavaScript 的限制,Vue 不能检测数组和对象的变化。
关于数组的部分:
其中对于数组,vue不能检测的改变有:
- 通过数组的索引值进行改变某一项,像刚刚的例子。
- 不能直接对数组长度的属性进行修改,例如:arr.length = 4
对此,vue提供了两种方法让我们来解决此问题: 第一种:使用全局set方法
Vue.set(vm.items, indexOfItem, newValue)
//Vue.set(数组名字, 改变的索引位置, 需要更改的值)
// Vue.set(arr,1,'我想被改变')
第二种:使用vue实例上的$set方法
vm.$set(vm.items, indexOfItem, newValue)
//vm.$set(数组名字, 改变的索引位置, 需要更改的值)
//this.$set(arr,1,'我想要不要被改变')
关于对象的部分:
对于已经创建的实例对象,依然是可以通过以下两种方法进行更改。
- 方法一:Vue.set(vm.someObject, 'b', 2)
- 方法二:this.$set(this.someObject,'b',2)