问题描述:
控制台打印出数组/对象数据已经修改成功,但是页面上并没有同步更新。
解决方法:
搜索引擎搜一下可以看到有好多答案了,总结有以下两点:
-
数组:使用数组更新检测方法
push()pop()shift()unshift()splice()sort()reverse()
-
对象:
Vue.set( target, propertyName/index, value )向响应式对象中添加一个 property,并确保这个新 property 同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新 property,因为 Vue 无法探测普通的新增 property (比如
this.myObject.newProperty = 'hi')
问题解析:
建议详细、仔细、逐字阅读深入响应式原理,文档已经描述的非常清晰。不知道你是否和我一样阅读文档不求甚解,只求快速找到解决方法 (・_・;
下面我们一起分析下产生这种问题的原因:参考示例
1. Vue 是如何追踪数据变化的
当你把一个普通的 JavaScript 对象传入 Vue 实例作为
data选项,Vue 将遍历此对象所有的 property,并使用Object.defineProperty把这些 property 全部转为 getter/setter。
2. 检测变化的注意事项
const list = [
{
name: "Jim Green",
age: 24

当Vue数组或对象数据更新后,视图未同步显示改变。解决方法包括使用数组的更新检测方法和确保对象的新property是响应式的。问题源于Vue在初始化时将对象的property转化为getter/setter,但无法检测新添加的property。遵循良好编程习惯,如使用Vue提供的方法创建新数组和对象,可以避免此类问题。
最低0.47元/天 解锁文章
1003

被折叠的 条评论
为什么被折叠?



