在处理vue项目的时候,可能经常会遇到数据变化,但是视图并没有实时渲染的情况,主要有两种情况

1.使用索引值操作数组时

使用索引值去更新数组时会出现数据变化试图却没有更新的情况,比如使用了push()、pop()、shift()、unshift()、splice()、sort()、reverse()等方法操作数组,或者是直接通过ary[index]操作数组都会出现这种情况

vm.items[indexOfItem] = newValue

解决办法1:通过数组的操作方法去修改(push(),pop(),splice()等)

vm.items.splice(插入的索引下标值, 删除元素的个数, 插入的元素)

解决办法2:使用$set()修改当前索引

this.$set(数组名,插入的索引下标值,插入的数据元素)

2、直接修改数组长度等信息

vm.items.length = newLength

3、对象的增加或者删除属性时

由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,所以属性必须在 data 对象上存在才能让 Vue 转换它,这样才能让它是响应的

4、异步更新队列

在最新的项目中遇到了这种情况,数据第一次获取到了,也渲染了,但是第二次之后数据只有在再一次渲染页面的时候更新,并不能实时更新。

Vue 异步执行 DOM 更新。只要观察到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变。如果同一个 watcher 被多次触发,只会被推入到队列中一次。

解决办法:

可在数据变化之后立即使用 Vue.nextTick(callback)。这样回调函数在 DOM 更新完成后就会调用。

 

作者 admin

百度广告效果展示