关于添加对象或者数组元素视图不更新问题【$set/Object.assign】

问题:直接添加对象或者数组方法视图不会更新

<template>
  <div class="home">
    <div>{{ student }}</div>
    <div v-for="(item, index) in items" :key="index">{{ item }}</div>
    <button @click="btn()">修改</button>
  </div>
</template>

<script>
export default {
  name: "HelloWorld",
  data() {
    return {
      student: {
        name: "张三",
      },
      items: [1, 2, 3],
    };
  },
  methods: {
    btn() {
      this.student.age = 18;
      this.items[1] = 666;
      console.log(this.student, this.items);
      // 此时控制台可以正常打印出已修改的数据,但是视图不显示修改后的数据
    },
  },
};
</script>

正确方法:通过$set或者Object.assign

<template>
  <div class="home">
    <div>{{ student }}</div>
    <div v-for="(item, index) in items" :key="index">{{ item }}</div>
    <button @click="btn()">修改</button>
  </div>
</template>

<script>
export default {
  name: "HelloWorld",
  data() {
    return {
      student: {
        name: "张三",
      },
      items: [1, 2, 3],
    };
  },
  methods: {
    btn() {
// -------------方法1-----------------------
      this.$set(this.student, "age", 18);
      this.$set(this.items, 1, 666);
      console.log(this.student, this.items);
      //视图正常更新

//-------------方法2--------------------------
      this.student.age = 15;
      this.student = Object.assign({}, this.student);
      console.log(this.student, this.items);
      //视图正常更新
    },
  },
};
</script>

 

发表评论 / Comment

用心评论~