当前位置: 首页 > news >正文

vue2-this.$set确保数据响应性的实例方法

1.前言

        在 Vue.js 2 中,this.$set 是一个用于确保数据响应性的实例方法。它主要用于解决 Vue 2 响应式系统的局限性,即无法自动检测对象属性的动态添加或数组索引的直接修改

2.问题

父组件后端请求获取动态数据

   this.uploadData[op.field] = op.fieldValue
   

子组件获取使用校验号码时未校验到输入的值,数据未进行响应式绑定。

<a-form-model-item v-if="peo.field=='certificate_no'" :label="peo.fieldName" :prop="peo.field">
   <a-input v-model="uploadData[peo.field]" placeholder="请输入号码" @change="changeData()"/>
 </a-form-model-item> 

props: {
        fieldList: {
            type: Array,
            default:[]
        },
    }

3 解决

this.$set(this.uploadData, op.field, op.fieldValue)

 4.this.$set

Vue 2 使用 Object.defineProperty 实现响应式数据。但这种方式存在以下限制

 对象属性动态添加:初始化时未定义的属性无法自动成为响应式。

data() {
  return { user: { name: "Alice" } };
},
methods: {
  addAge() {
    this.user.age = 25; // 非响应式,视图不会更新!
  }
}

数组索引的直接修改

this.items[0] = newValue; // 非响应式,视图不会更新!

this.$set 强制让 Vue 追踪新属性或数组索引的变化,并触发视图更新。

语法

this.$set(target, propertyName/index, value);

object 是要设置属性的对象,key 是要设置的属性名,value 是要设置的属性值。

4.1this.$set使用场景
4.1.1对象添加新属性
// 错误:直接添加属性,视图不更新
this.user.age = 25;

// 正确:使用 this.$set
this.$set(this.user, 'age', 25); // 响应式更新
4.1.2修改数组某一项
// 错误:直接通过索引修改
this.items[0] = 'new value';

// 正确:使用 this.$set
this.$set(this.items, 0, 'new value'); // 视图更新
4.1.3修改数组长度
// 错误:直接修改数组长度
this.items.length = 0; // 视图不更新!

// 正确:使用 splice
this.items.splice(0); // 响应式更新
4.1.4Vue.set与this.$set关系

this.$set 是实例方法,Vue.set 是全局方法,两者功能一致:

// 全局方法
Vue.set(this.user, 'age', 25);

// 实例方法(组件内更方便)
this.$set(this.user, 'age', 25);

 5.参考

详解vue2中的this.$set_vue2 this.$set-CSDN博客文章浏览阅读3.4k次,点赞5次,收藏18次。在 Vue.js 中,this.$set 是一个用于在响应式对象上设置属性的方法。它可以用于在 Vue 实例的数据对象或组件的响应式属性上添加新的属性,确保新添加的属性也是响应式的。其中,object 是要设置属性的对象,key 是要设置的属性名,value 是要设置的属性值。默认情况下,Vue.js 的响应式系统会在初始化时对数据对象进行递归地劫持,使其成为响应式的。这意味着当你直接给一个已经存在的属性赋值时,Vue 会自动检测到这个变化并更新视图。_vue2 this.$set https://blog.csdn.net/weixin_42289279/article/details/134004998?fromshare=blogdetail&sharetype=blogdetail&sharerId=134004998&sharerefer=PC&sharesource=2301_76671906&sharefrom=from_link

相关文章:

  • CCF-CSP第31次认证第二题——坐标变换(其二)【NA!前缀和思想的细节,输出为0的常见原因】
  • 大模型 + cursor应用案例
  • 文件fd
  • 苏剑林“闭门造车”之多模态思路浅谈思考
  • PageHelper分页插件
  • C语言题目:链表数据求和操作
  • 【系列教程】Python第三课:用前两课知识解决实际问题
  • “mysqld --initialize --console ”执行不成功情况总结和解决措施
  • vue3-04vue3中ref函数( 定义一个响应式的数据)
  • 设计模式14:职责链模式
  • 普通报表入门
  • 使用html css js 开发一个 教育机构前端静态网站模板
  • Show 『Picture Add + Crosee Line ROI
  • 【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析④】
  • 《StyleID:一种无训练的方法将大规模扩散模型适配于风格迁移》
  • Mistral Saba:为中东和南亚量身打造的AI模型
  • npu 瑞芯微rk系列,rknn模型转换以及npu使用
  • ES8字符串填充用法总结:padStart(),padEnd(),rest剩余参数的用法{name,...obj},扩展运算符的用法,正则表达式命名捕获组
  • 聚焦地灾防治,助力城市地质安全风险防控
  • 基于STM32的智能交通信号控制系统
  • 免签国+1,中乌(兹别克斯坦)互免签证协定6月生效
  • 沪喀同心|为新疆青少年提供科普大餐,“小小博物家(喀什版)”启动
  • 市场监管总局召开平台企业支持个体工商户发展座谈会
  • 中哥两国元首共同见证签署《中华人民共和国政府与哥伦比亚共和国政府关于共同推进丝绸之路经济带和21世纪海上丝绸之路建设的合作规划》
  • 乌方:泽连斯基只接受与普京会谈,拒见其他俄代表
  • 波兰关闭俄罗斯驻克拉科夫领事馆