变异方法(修改原有数组)
push() pop() shift() unshift() splice() sort() reverse()
Vue对数据的处理一般都是响应式的,而原生JS数组方法对数据的处理在默认情况下都是非响应式的。要在Vue中使用这些数组方法就需要将它们变成响应式的,只有这样我们才能通过操作数组来改变页面模板内容。变异方法主要就是体现在这一层面,Vue将原来非响应式的数组方法处理成了响应式的。这些方法的共性就是都会影响原始的数组数据。
替换数组(生成新的数组)
filter() concat() slice()
以上三个方法的共性是返回一个新的数组,通过新的数组替换旧的数组来实现影像数据的变化,而不会改变原来数组的数据。
下面举个栗子来综合演示一下Vue是如何使数组方法变成响应式的。
以上就是响应式的效果,数据的变化直接影响页面内容的变化。
下面再写一个删除数据的效果让整个栗子更加完整。
以上响应式的效果是通过变异方法来实现的。下面看看替换数组如何实现响应式效果。
除了用上面的API对数组进行操作以外,Vue还可以通过索引来直接操作对应的数组数据,但是索引处理数据的方式本身也不是响应式的,针对这个问题Vue也有对应的方法——数组响应式变化。
数组响应式变化——修改响应式数据
Vue.set(vm.items,indexOfltem,newValue) vm.$set(vm.items,indexOfltem,newValue) ①参数一表示要处理的数组名称 ②参数二表示要处理的数据所应 ③参数三表示要处理的数据的值
下面举个栗子:
首先尝试直接在页面模板挂载完成后就修改数据看看效果。
结果是页面一点变化都没有,但后台打印出来的list中的第二项已经变成了lime。产生这种结果的原因是利用索引处理的数据不是响应式的。
再用上面说到的API演示一下。
这回效果就在页面中立竿见影了。
以上方法除了可以处理数组之外还可以处理data中对象形式的数据,下面举个栗子。
很多时候我们都需要往data里的对象动态地添加数据。
得到的处理后的数据依然不是响应式的,在控制台调试不了。
使用API后的效果如下: