Vue中添加新属性并更新视图[ Vue.set() ]

背景

再项目开发过程中经常遇到给data里面声明的变量,动态的赋值时,值发生了变化,但是视图并没有更新;
以下是官方文档中的叙述:

当一个 Vue 实例被创建时,它将 data 对象中的 所有的属性 加入到 Vue 的响应式系统中。当这些属性的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。

当这些数据改变时,视图会进行重渲染。值得注意的是只有当实例被创建时 data 中存在的属性 才是响应式的。也就是说如果你添加一个新的属性,比如:vm.b = 'hi',那么对 b 的改动将不会触发任何视图的更新;

问题简述

1、如果你知道你会在晚些时候需要一个属性,但是一开始它为空或不存在,那么你仅需要设置一些初始值,这样后续赋值的时候即可跟踪到;例如:

data:{
   id: '',
 name: '',
  age: ''
}

2、不知道自己需要什么属性,所有的值都是动态赋予的(后面的解决方案,主要针对此问题);

解决思路

查看vue的官方文档,我们发现它提供了Vue.set( target, propertyName/index, value )方法
(网址:https://cn.vuejs.org/v2/api/#Vue-set)

用法:

向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性,因为 Vue 无法探测普通的新增属性,例如:this.obj.s = 'hello',这种是不会触发视图更新的
此时使用:
this.$set(目标变量,属性,属性值);

举例:

data: {
  obj: {}
}

methods: {
  init () {
    // 给obj添加了一个name的属性,它的值是'zhangsan'
    this.$set(this.obj, 'name', 'zhangsan')
}
}

综述

1、已知属性时,设置默认值保证视图更新;
2、属性未知时,使用Vue.set(),进行动态赋值,更新视图

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 7,276评论 0 25
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,148评论 1 32
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,452评论 0 9
  • vue理解浅谈 一 理解vue的核心理念 使用vue会让人感到身心愉悦,它同时具备angular和react的优点...
    ndxs2008阅读 24,189评论 2 18
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,187评论 6 13