你瞅啥呢

2022-10-09 vue 修改数组对象中的属性值,视图没有同步更新

请使用vue提供的$set()方法

注:本文仅针对数组嵌套对象的数据来展开讨论。

问题:修改数组对象中的属性值,视图没有同步更新,但实际上已经修改了数据。

原因:vue的设计导致的。

例子:

复制代码
let data2 = [
{
    value: 1,
    status: false,
},
{
    value: 2,
    status: true,
},
];
复制代码

比如我先把data2里面的第一项的字段改成true,你或许会写:

data2[index].status = !data2[index].status;

但是这样并不能响应式地更新视图,请看解决方案:

解决方案:

this.$set(data2[index], "status", !data2[index].status);

看一下官方描述:

复制代码
Vue.set( target, propertyName/index, value )
参数:

{Object | Array} target
{string | number} propertyName/index
{any} value
返回值:设置的值。 用法: 向响应式对象中添加一个 property,并确保这个新 property 同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新 property,因为 Vue 无法探测普通的新增 property (比如 this.myObject.newProperty = 'hi') 注意对象不能是 Vue 实例,或者 Vue 实例的根数据对象。
复制代码
this.$set(目标值(data2), 属性值(status), 新属性值(true));

2022-10-10
今天发现uniapp的picker组件修改数据时不能响应式更新form表单,而解决方案和上面一样可以通过$set来赋值。


posted @   叶乘风  阅读(2087)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示