this.$set的使用

遇到的场景

处理后端接口返回的数据时,因为需要控制某个状态,往往会这样写:

data() {
    return {
  		id: id,
        personInfo: {}
    }
},
methods: {
    // 获取人员信息函数
    getPersonInfoFn() {
        // 引入的 getPersonInfo 接口
        getPersonInfo({
            id: this.id  // data中的数据
        }).then(res => {
            this.personInfo = res.data;
            // active 无法在视图上显示相应的样式
            this.personInfo.active = true;
        })}
}

尽管这样的写法看似正确,在控制台输出的时候也能 打印出相应的值,但是,在视图上却不能显示 “active” 相应的样式

原因

Object.defineProperty只能劫持已经存在的属性,后增的,或者删除的,都不知道;Vue2针对这些bug单独写了方法处理( s e t 、 set、 setdelete)。

Vue2初始化的过程中,会调用 getter和setter方法(其实是新增加的属性上没有 get和set的方法),所以该属性必须存在于 data 中,视图层才会响应改数据的变化

解决方法

上面的解决方法是这样的:

// 在赋值前,即 this.personInfo.active = true; 前添加
this.$set(personInfo, "active", false);

使用方法

this.$set(obj, key, value);
// obj 需要在某个对象上添加 某属性的 父级对象
// key 所要添加的 key 
// value key对应的值

使用的时候,十分方便快捷

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@乐知者@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值