在 Vue.js 中,你可以使用 watch 监听数组的变化。但是,要注意的是,如果你直接修改数组中的元素,Vue.js 是无法检测到数组的变化的。因此,你需要使用一些数组变异方法,如 push()pop()shift()unshift()splice()sort()reverse(),这些方法会触发 Vue.js 的响应式系统。

下面是一个例子,演示如何使用 watch 监听数组的变化:

new Vue({
  data: {
    list: [1, 2, 3],
  },
  watch: {
    list: function(newVal, oldVal) {
      console.log('list changed:', newVal, oldVal);
    }
  },
  methods: {
    add: function() {
      this.list.push(this.list.length + 1);
    },
    remove: function() {
      this.list.pop();
    },
  }
});

在上面的代码中,我们定义了一个名为 list 的数组,并使用 watch 监听其变化。在 add() 方法中,我们使用 push() 方法向数组中添加一个新的元素。在 remove() 方法中,我们使用 pop() 方法从数组中删除最后一个元素。每当数组发生变化时,watch 中定义的回调函数都会被调用,并传递新的数组和旧的数组作为参数。

需要注意的是,如果你需要监听数组中某个元素的变化,那么你需要使用深度监听,即将 deep 属性设置为 true,如下所示:

new Vue({
  data: {
    list: [{name: 'Tom', age: 20}, {name: 'Jerry', age: 25}],
  },
  watch: {
    list: {
      handler: function(newVal, oldVal) {
        console.log('list changed:', newVal, oldVal);
      },
      deep: true,
    }
  },
  methods: {
    update: function() {
      this.list[0].age++;
    },
  }
});

在上面的代码中,我们定义了一个包含两个对象的数组,并使用 watch 深度监听其变化。在 update() 方法中,我们修改了数组中第一个对象的 age 属性。由于我们将 deep 属性设置为 true,因此 Vue.js 会递归监听数组中所有对象的变化,从而检测到数组的变化


原文地址: https://www.cveoy.top/t/topic/ftuP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录