美文网首页
vue数据更新检测

vue数据更新检测

作者: 爱笑的疯小妞 | 来源:发表于2019-03-12 10:51 被阅读0次

此部分内容官网讲的很清楚,再此做个笔记
摘自:https://cn.vuejs.org/v2/guide/list.html
Vue 包含一组观察数组的变异方法(会改变被这些方法调用的原始数组),
这些方法如下:
push() 向数组的末尾添加一个或更多元素,并返回新的长度。
pop() 删除并返回数组的最后一个元素
shift()删除并返回数组的第一个元素
unshift() 向数组的开头添加一个或更多元素,并返回新的长度。
splice() 删除元素,并向数组添加新元素。
sort() 对数组的元素进行排序
reverse()颠倒数组中元素的顺序。
将会触发视图更新。

Vue包含一组观察数组的非变异方法(不会改变原始数组,但总是返回一个新数组),
这些方法如下:
filter() 创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素
concat()连接两个或更多的数组,并返回结果。
slice()从已有的数组中返回选定的元素。
当使用非变异方法时,可以用新数组替换旧数组,并不会重新渲染影响性能。

由于 JavaScript 的限制,Vue 不能检测以下变动的数组:
1、当你利用索引直接设置一个项时
vm.items[indexOfItem] = newValue
解决方法:

// Vue.set
Vue.set(vm.items, indexOfItem, newValue)

因为数据层次太多,render函数没有自动更新,需手动强制刷新。添加this.$forceUpdate();进行强制渲染,效果实现。

2、当你修改数组的长度时
vm.items.length = newLength
``
解决方法:

vm.items.splice(newLength)

还是由于 JavaScript 的限制,Vue 不能检测对象属性的添加或删除。
对于已经创建的实例,Vue 不能动态添加根级别的响应式属性。但是,可以使用 Vue.set(object, key, value) 方法向嵌套对象添加响应式属性。
解决方法:

Vue.set(vm.userProfile, 'age', 27)
vm.userProfile = Object.assign({}, vm.userProfile, {
  age: 27,
  favoriteColor: 'Vue Green'
})

相关文章

网友评论

      本文标题:vue数据更新检测

      本文链接:https://www.haomeiwen.com/subject/nxhgpqtx.html