vue中,怎么给data对象添加新的属性?(尼玛这面试题居然让我给碰上了。。。。)

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 已经成功添加,但是视图并未刷新:

 

 
原因在于在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 处理成一个响应式的属性,此时视图也会跟着改变了:

 
posted @ 2019-10-10 09:50  飞翔的蜗牛~  阅读(18936)  评论(0编辑  收藏  举报
Live2D