数据更新但视图不刷新的解决方法
前言: 在开发中我们处理数据时会遇到数据更新了,但视图并没有更新的情况。
一般有以下几种情况会导致该问题:
- 动态给对象新增属性或者删除属性
- 通过数组下标修改数组中的元素或者手动修改数组的长度
示例
1 | <template> |
解决方案
静默刷新(使用v-if的特性): 在修改值之后将元素销毁,然后在修改后的下一次DOM渲染完成时再显示出来,这样就会触发组件重新加载data的数据进行渲染,data中被修改的数据才是最新的。
1
2
3
4
5
6
7handleTest(){
this.obj.b = 456
this.show = false
this.$nextTick(()=>{
this.show = true
})
}Vue.$set(官方推荐): 使用这个api修改的数据会为其添加响应式getter和setter让其拥有数据响应的特性
1
2
3
4// vm.set(要操作的对象或数组, 要新增或者修改的数组或对象key, 对应的值)
handleTest(){
this.$set(this.obj, 'b', 456)
}Vue.$forceUpdate(手动强制更新视图): 因为Vue修改数据是异步执行的,所以视图不会立即更新,会等到下一次dom更新循环结束后统一更新发生在这一次循环中修改的数据,然后同步视图更新,所以我们可以修改后自己手动强制更新视图。
1
2
3
4handleTest(){
this.obj.b =456
this.$forceUpdate()
}Object.assign(使用修改栈能触发视图更新的特性)
1
this.obj = Object.assign({}, {...this.obj, b: 456})
对于数组还可以使用splice方法: Vue对于数组的操作能识别变化的api包括push()、pop()、shift()、unshift()、splice()、sort()、reverse()这些都可被vue监测到
- 标题: 数据更新但视图不刷新的解决方法
- 作者: JiangWen
- 创建于 : 2020-02-28 12:15:00
- 更新于 : 2024-11-24 17:45:51
- 链接: https://blog.jiangwen.site/2020/02/28/Vue/数据更新但视图不刷新的解决方法/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
推荐阅读
推荐阅读
评论