Bootstrap

vue对象新增属性、删除属性,直接通过下标修改数组、页面未更新如何处理?

使用this.$set()方法处理,具体如下:

<template>
  <div class="home">
    <div v-show="obj.name">
      姓名:{{obj.name}}
    </div>
    <div v-show="obj.sex">
      性别:{{obj.sex}}
    </div>
    <button @click="addSex">添加性别</button>
    <button @click="deleteName">删除姓名</button>
    <div>
      {{arr}}
    </div>
    <button @click="changeArr">更改数组值</button>
    <button @click="deleteItem">删除第一个数组项</button>
  </div>
</template>

<script>
export default {
  name: "Home",
  data() {
    return {
      obj: {
        name: "张三",
        age: 20,
      },
      arr: ["李四", "王五"],
    };
  },
  methods: {
    //新增性别属性值
    addSex() {
      // this.obj.sex = "女"; //数据改变,视图没有更新

      //使用如下方式处理
      this.$set(this.obj, "sex", "女"); 需要改变的源对象、要添加的对象属性名、更改后的对象属性值
    },

    //删除对象属性
    deleteName() {
      // delete this.obj.name; //删除属性,数据改变,视图未更新

      //使用this.$delete方法
      this.$delete(this.obj, "name");
      console.log(this.obj);
    },

    //更改数组的值
    changeArr() {
      // this.arr[0] = "更改后的李四"; //数据改变,视图没有更新

      //使用如下方式处理
      this.$set(this.arr, 0, "更改后的李四"); //需要改变的源数组、索引、数据
    },

    //删除数组的第一项
    deleteItem() {
      this.$delete(this.arr, 0); //需要删除的源数组、索引
    },
  },
};
</script>

;