数组更新检测
变异方法 (mutation method),顾名思义,会改变被这些方法调用的原始数组。相比之下,也有非变异 (non-mutating method) 方法,这些不会改变原始数组,但总是返回一个新数组。
Vue 包含一组观察数组的变异方法,所以它们也将会触发视图更新。这些方法都是直接作用在原始数组上,可以改变原始数组,方法有:
- push-向数组的开头添加一个或更多元素,返回新数组的长度,该方法可以传递多个值,即添加多个元素,例:arr.push(newItem1,newItem2,…,newItemN)
- pop-删除数组最后一项,返回值为该项
- shift-删除数组第一项,返回值为该项
- unshift-向数组的开头添加一个或更多元素,返回值为新数组的长度,该方法可以传递多个值,例:arr.unshift(newItem1,newItem2,…,newItemN)
- splice-对数组进行添加/删除项目,返回被删除的项目
- sort-对数组的元素进行排序,在原数组上进行排序,不生成副本,返回该数组的引用
reverse-颠倒数组中元素的顺序
当使用非变异方法时,可以用新数组替换旧数组,从而触发试图更新,方法有:
filter-创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素,不会改变原始数组
- concat-用于连接两个或多个数组,该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本
- slice-从已有的数组中返回选定的元素,返回一个新的数组
example1.items = example1.items.filter(function (item) {
return item.message.match(/Foo/)
})
对象更改检测注意事项
由于 JavaScript 的限制,Vue 不能检测对象属性的添加或删除
对于已经创建的实例,Vue 不能动态添加根级别的响应式属性。但是,可以使用 Vue.set(object, key, value) 方法向嵌套对象添加响应式属性。
有时你可能需要为已有对象赋予多个新属性,比如使用 Object.assign() 或 _.extend()。在这种情况下,你应该用两个对象的属性创建一个新的对象。
vm.userProfile = Object.assign({}, vm.userProfile, {
age: 27,
favoriteColor: 'Vue Green'
})
摘自vue官方文档