美文网首页前端技术
Vue中添加新属性并更新视图[ Vue.set() ]

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

作者: 时间走了光 | 来源:发表于2019-07-15 18:06 被阅读0次

背景

再项目开发过程中经常遇到给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.js入门(四):常用API

    1 数据类API Vue.set 向响应式对象中添加一个 属性,并确保这个新 属性 同样是响应式的,且触发视图更新...

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

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

  • Vue.set和Vue数据监测

    Vue.set this.$set(this.student,'添加的属性','添加的属性值') Vue数据监测 ...

  • vue.set()

    vue为了更加简洁,当data的数据是数组或者对象时,动态的添加或删除,视图将不会更新Vue.set()可以用来设...

  • vue强制更新

    使用update this.$forceUpdate(),强制视图更新 用vue.set this.$set(th...

  • Vue.set()触发视图更新

    向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性,因...

  • vue.js 中 $set 使用场景、解决方案比较、原理

    使用场景: 实例创建之后添加新的属性到实例上,它不会触发视图更新。 由于 JavaScript 的限制,Vue 不...

  • 解释Vue深入响应式原理

    tip:实例创建之后添加新的属性到实例上,不会触发视图更新 分解tip:new Vue() 生命周期created...

  • Vue中使用$set来添加数据并更新视图的方法

    vue中添加data数据的时候视图是不更新的,vue提供了一种$set的方法来强制修改数据并更新视图的方法: co...

  • vue查缺补漏

    Object.defineProperty有缺陷,就是无法监控到对象属性临时添加的属性,必须使用VUE.set($...

网友评论

    本文标题:Vue中添加新属性并更新视图[ Vue.set() ]

    本文链接:https://www.haomeiwen.com/subject/ilhokctx.html