Vue中给data中的对象属性添加一个新的属性时会发生什么,如何解决?

示例:

<template>
<div>  
<ul>    
<li v-for="value in obj" :key="value">
        {{value}}  
</li> 
</ul> 
<button @click="addObjB">添加obj.b</button>
</div>
</template>
<script>
export default{
  data () {
      return {
        obj: {
        a: 'obj.a'
      }
    }
  },
  methods: {
    addObjB () {
        this.obj.b = 'obj.b'
      console.log(this.obj)
    }
  }
}
</script>
<style></style>

点击button会发现, obj.b 已经成功添加,但是视图并未刷新:


QQ截图20190303154007.png

原因在于在Vue实例创建时, obj.b 并未声明,因此就没有被Vue转换为响应式的属性,自然就不会触发视图的更新,这时就需要使用Vue的全局api—— $set():

addObjB () {    
// this.obj.b = 'obj.b'      
this.$set(this.obj, 'b', 'obj.b')
      console.log(this.obj)
    }

$set() 方法相当于手动的去把 obj.b 处理成一个响应式的属性,此时视图也会跟着改变了:


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

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,254评论 6 13
  • 毕业之后就在一直合肥小公司工作,没有老司机、没有技术氛围,在技术的道路上我只能独自摸索。老板也只会画饼充饥,前途一...
    前端小酱阅读 4,132评论 5 56
  • 主要还是自己看的,所有内容来自官方文档。 介绍 Vue.js 是什么 Vue (读音 /vjuː/,类似于 vie...
    Leonzai阅读 3,407评论 0 25
  • 随着人们经济支出程度的不时进步,人们的肉体需求也在不时发作着变化,由于古钱币具有历史时代的见证,且本身存在着深沉的...
    不如初12阅读 186评论 0 0