vue-09-Vue.set和数组方法

在全局之下:vm.$set(this.lists , 2 , alalal) : 首先,如果你实例化了 Vue 对象,你可以使用 vm.$set ( 需要改变的数据对象 , 需要改变的数据的key , 需要改变后得到的值 )

在组件内部: this 可以取代 vm ,但是必须是在 Dom 节点 挂载之后 ,也就是需要在 mounted 以及 。 mounted 之后的钩子函数内部才能使用 this 因为此时 才会出现 this

如果是单html页面 , 可以使用 Vue.set ( 需要改变的数据对象 , 需要改变的数据的key , 需要改变后得到的值 )

<li v-for="(item , index) in lists" :key="index">
  {
         
  { item }}
</li>
<button @click="add">添加</button>
export default {
  data() {
    return {
      date : new Date(),
      lists : [1 ,2 ,3 ,4]
    };
  },
  methods: {
    add(){
      // this.lists[0] = 5 .   //这样数组也是会更新的,但是新添加的数据,不是响应式的,在控制台改变他的值,页面展示不会变化
      // this.lists.push(5)    //这样数组也是会更新的,而且因为是调用的数组的变异方法,vue会监听数据变化,说一新增的数据也是响应式的
      this.$set(this.lists , 2 , alalal) .  //这样即更新了数组,又讲新增加的数据也变成了响应式数据
    }
  },
};

这里改变数据 的方法 ,在vue 内部定义了叫做 变异数组方法,原因是因为 ,vue 内部将这些数组方法,进行处理过了,会自动改变原数组,也就是 变成了自动响应的数据

而vue 还有另外的 数组方法 , 调用这些方法之后,不会改变原数组 , 而是生成一个新的数组

变异数组:Vue 将被侦听的数组的变异方法进行了包裹,所以它们也将会触发视图更新。这些被包裹过的方法包括

push()
pop()
shift()
unshift()
splice()
sort()
reverse()

新数组:例如 filter()、concat() 和 slice() 。它们不会改变原始数组,而总是返回一个新数组。当使用非变异方法时,可以用新数组替换旧数组:

example1.items = example1.items.filter(function (item) {
  return item.message.match(/Foo/)
})
经验分享 程序员 微信小程序 职场和发展