Vue2.js给对象动态添加响应式属性

简介: Vue2.js给对象动态添加响应式属性

文档原文说


property 必须在 data 对象上存在才能让 Vue 将它转换为响应式的


不过发现一个奇怪的现象,userInfo.age 并没有在data 中定义,当点击按钮更新的时候,视图中的userInfo.age 也发生了变化

<template>
  <div class="">
    <div class="userinfo">
      name: {{ userInfo.name }} age: {{ userInfo.age }}
    </div>
    <button @click="handleUpdateUserInfo">修改userInfo</button>
  </div>
</template>
<script>
export default {
  name: '',
  data() {
    return {
      userInfo: {
        name: 'Tom',
      },
    }
  },
  methods: {
    handleUpdateUserInfo() {
      this.userInfo.name = 'Jack'
      this.userInfo.age = 23
    },
  }
}
</script>
<style lang="less"></style>
<style lang="less" scoped></style>

但是,如果单独更新 age字段,视图并没有发生变化

handleUpdateUserInfo() {
  // this.userInfo.name = 'Jack'
  this.userInfo.age = 23
},

所以,userInfo.age 和文档说的一致,并不是响应式属性,而是userInfo.name 更新了触发视图更新


添加单个响应式属性

要让age也是响应式的,动态增加响应式效果,可以使用this.$set 方法,动态设置响应式属性


语法

// 向嵌套对象添加响应式 property
Vue.set(object, propertyName, value)

示例


handleUpdateUserInfo() {
  //   this.userInfo.name = 'Jack'
  //   this.userInfo.age = 23
  this.$set(this.userInfo, 'age', 23)
},

添加多个响应式属性

handleUpdateUserInfo() {
  // 创建一个新的对象
  this.userInfo = { ...this.userInfo, age: 23, school: 'pku' }
},

相关文章
|
3月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
491 0
|
10月前
|
JavaScript 前端开发
如何在 JavaScript 中使用 __proto__ 实现对象的继承?
使用`__proto__`实现对象继承时需要注意原型链的完整性和属性方法的正确继承,避免出现意外的行为和错误。同时,在现代JavaScript中,也可以使用`class`和`extends`关键字来实现更简洁和直观的继承语法,但理解基于`__proto__`的继承方式对于深入理解JavaScript的面向对象编程和原型链机制仍然具有重要意义。
|
5月前
|
编解码 JavaScript 前端开发
【Java进阶】详解JavaScript的BOM(浏览器对象模型)
总的来说,BOM提供了一种方式来与浏览器进行交互。通过BOM,你可以操作窗口、获取URL、操作历史、访问HTML文档、获取浏览器信息和屏幕信息等。虽然BOM并没有正式的标准,但大多数现代浏览器都实现了相似的功能,因此,你可以放心地在你的JavaScript代码中使用BOM。
145 23
|
10月前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
206 1
|
6月前
|
JavaScript 前端开发 UED
vue2和vue3的响应式原理有何不同?
大家好,我是V哥。本文详细对比了Vue 2与Vue 3的响应式原理:Vue 2基于`Object.defineProperty()`,适合小型项目但存在性能瓶颈;Vue 3采用`Proxy`,大幅优化初始化、更新性能及内存占用,更高效稳定。此外,我建议前端开发者关注鸿蒙趋势,2025年将是国产化替代关键期,推荐《鸿蒙 HarmonyOS 开发之路》卷1助你入行。老项目用Vue 2?不妨升级到Vue 3,提升用户体验!关注V哥爱编程,全栈开发轻松上手。
402 2
|
6月前
|
存储 数据采集 供应链
属性描述符初探——Vue实现数据劫持的基础
属性描述符还有很多内容可以挖掘,比如defineProperty与Proxy的区别,比如vue2与vue3实现数据劫持的方式有什么不同,实现效果有哪些差异等,这篇博文只是入门,以后有时间再深挖。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
10月前
|
JSON 前端开发 JavaScript
JavaScript中对象的数据拷贝
本文介绍了JavaScript中对象数据拷贝的问题及解决方案。作者首先解释了对象赋值时地址共享导致的值同步变化现象,随后提供了五种解决方法:手动复制、`Object.assign`、扩展运算符、`JSON.stringify`与`JSON.parse`组合以及自定义深拷贝函数。每种方法都有其适用场景和局限性,文章最后鼓励读者关注作者以获取更多前端知识分享。
114 1
JavaScript中对象的数据拷贝
|
10月前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
142 18
|
10月前
|
JavaScript 前端开发 API
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
260 17
|
10月前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
191 1