vue 数据没有驱动视图?

Part.1  问题

数据改变,视图却没有根据数据而改变。

原因在于,数据并不在 vue 监听范围之内,vue 只对事先在 data 中声明的变量丶对象等类型数据进行监听

Part.2  例子

<template>
  <div class="home">
    <button @click="obj.age++">+年龄</button>
    <h1>{{obj.name}}</h1>
    <h1>{{obj.age}}岁</h1>
  </div>
</template>

<script>
export default {
  name: "home",
    data() {
      return {
          obj: {
              name: '小明'
          }
      }
    },
    mounted() {
        this.obj.age = 20;
    }
};
</script>

我们为 data 中声明的 对象 obj 添加一个新属性 age = 20

效果:

我们发现视图并没有发生改变,我们从控制台打印看出

age 属性并不支持 get & set 方法,所以不在 vue 的监听范围之内,自然视图不会发生改变

Part.3  解决

为 age 属性添加 get & set,使 vue 监听 age 属性,关键字:$set

Vue.set( target, propertyName/index, value )

参数:

  • {Object | Array} target
  • {string | number} propertyName/index
  • {any} value

我们将 

 mounted() {
   this.obj.age = 20;
}

修改为

 mounted() {
   this.$set(this.obj, 'age', 20);
}

效果:

已经显示出来了,我们再看控制台打印结果:

已经有 age 属性了,说明已经被 vue 监听,完成!!!~

原文地址:https://www.cnblogs.com/langxiyu/p/10902049.html