vue数据更改,页面不变化

在Vue.js中,由于JavaScript的限制,vue组件无法直接监听对象属性的添加和删除。当属性不在data中定义时,视图无法响应数据变化。文章通过实例展示了在遇到此类问题时,如何通过`this.$set`方法或`Object.assign`来确保新增属性被正确监听并更新视图。在Vue3中,这一问题得到解决,动态添加属性可以被自动监听。
摘要由CSDN通过智能技术生成

由于受JavaScript的限制,vue.js不能监听对象属性的添加和删除,因为在vue组件初始化的过程中,会调用getter和setter方法,所以该属性必须是存在在data中,视图层才会响应该数据的变化。

我们打印后台发现,数据更改,但页面没有变化
在这里插入图片描述
我们发现,只有name属性有get,set,这两个属性就是双向绑定时对数据的监测和劫持的,kind属性未被监测,发生变化时也就不会展示

解决办法两种
1.this.$ser(对象,对象属性名,属性值)

<template>
  <div>{{animal.name}}</div>
  <div>{{animal.kind}}</div>
  <button @click="addKind">添加年龄属性</button>
</template>
<script>
export default {
data() {
   return {
     animal: {
       name: '小花',
     }
   }
},
methods: {
   addKind() {
     this.$set(this.animal, 'kind', 'dog')
     console.log(this.animal)
   }
}
}
</script>

在这里插入图片描述

2.通过Object.assign(target, sources)方法

addKind() {
     this.animals.kind= 15
     this.animals = Object.assign({}, this.animals)
   }

在这里插入图片描述
通过以上两种方式,我们发现kind属性也有各自的get和set方法,所以属性值的变化也能够被监测到了

vue3在这里插入图片描述
在这里插入图片描述

在vue3中,我发现这个错误不存在了,正常做属性的添加与删除,也能够被监测到,由于打印中看见了proxy,我猜测是使用了代理的方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值