当前位置: 首页 > 知识库问答 >
问题:

vue.js$watch对象数组

毛峻
2023-03-14
mounted: function() {
  this.$watch('things', function(){console.log('a thing changed')}, true);
}

< code>things是一个对象数组< code>[{foo:1},{foo:2}]

$watch检测对象何时添加或删除,但不检测对象上的值何时更改。我该怎么做?

共有3个答案

夏侯兴怀
2023-03-14

您可以使用$watch('arr.0', () =

从 https://v2.vuejs.org/v2/api/#vm-watch:

注意:在更改(而不是替换)对象或数组时,旧值将与新值相同,因为它们引用相同的对象/数组。Vue不保留预变异值的副本。

但是,您可以迭代的判决/数组和$watch每个项目独立。即。$watch('foo.bar')-这监视对象'foo'的属性'bar'中的更改。

在本例中,我们观察arr_of_numbers中的所有项目,以及arr_ of_ objects中所有项目的“foo”属性:

mounted() {
        this.arr_of_numbers.forEach( (index, val) => {
            this.$watch(['arr_of_numbers', index].join('.'), (newVal, oldVal) => {
                console.info("arr_of_numbers", newVal, oldVal);
            });
        });

        for (let index in this.arr_of_objects) {
            this.$watch(['arr_of_objects', index, 'foo'].join('.'), (newVal, oldVal) => {
                console.info("arr_of_objects", this.arr_of_objects[index], newVal, oldVal);
            });
        }

    },
    data() {
        return {
            arr_of_numbers: [0, 1, 2, 3],
            arr_of_objects: [{foo: 'foo'}, {foo:'bar'}]
        }
    }

壤驷兴朝
2023-03-14

如果有人需要获取数组内更改的项目,请选中它:

jsdild示例

示例代码:

new Vue({
  ...
  watch: {
    things: {
      handler: function (val, oldVal) {
        var vm = this;
        val.filter( function( p, idx ) {
            return Object.keys(p).some( function( prop ) {
                var diff = p[prop] !== vm.clonethings[idx][prop];
                if(diff) {
                    p.changed = true;                        
                }
            })
        });
      },
      deep: true
    }
  },
  ...
})
方河
2023-03-14

您应该将对象而不是布尔值作为选项传递,因此:

mounted: function () {
  this.$watch('things', function () {
    console.log('a thing changed')
  }, {deep:true})
}

或者您可以将观察器设置到< code>vue实例中,如下所示:

new Vue({
  ...
  watch: {
    things: {
      handler: function (val, oldVal) {
        console.log('a thing changed')
      },
      deep: true
    }
  },
  ...
})

[演示]

 类似资料:
  • 本文向大家介绍深入对Vue.js $watch方法的理解,包括了深入对Vue.js $watch方法的理解的使用技巧和注意事项,需要的朋友参考一下 博主最近对着vue.js的官方教程在自学vue.js,博主自幼愚钝,在教程中真的是好多点都不太理解,接下来要说的这个$watch方法就是其中一个不太理解的点了。咱们先来看一下对于$watch方法在vue.js的API中是怎么解释的吧:观察 Vue 实例

  • 比如,我切换图片时,触发以下method: 这里自动切换到当前图片对象 最后在watch时使用到了computed后的对象,但是computed是在watch之后执行的,activeImage数据就不对,有没有什么办法解决?

  • 本文向大家介绍vue.js中$watch的用法示例,包括了vue.js中$watch的用法示例的使用技巧和注意事项,需要的朋友参考一下 前言 vue.js是一个数据驱动的web界面库。Vue.js只聚焦于视图层,可以很容易的和其他库整合。代码压缩后只有24kb Vue.js 提供了一个方法 watch,它用于观察Vue实例上的数据变动。对应一个对象,键是观察表达式,值是对应回调。值也可以是方法名,

  • 本文向大家介绍Vue.js计算属性computed与watch(5),包括了Vue.js计算属性computed与watch(5)的使用技巧和注意事项,需要的朋友参考一下 在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作。模板是为了描述视图的结构。在模板中放入太多的逻辑会让模板过重且难以维护。这就是为什么 Vue.js 将绑定表达式限制为一个表达式。如果需要多于一个表达式的逻辑,应当

  • 我对非常陌生,并试图弄清楚为什么我的Watch在作为对象访问时没有触发。我看到了这条线索,但我不清楚我的问题是否相同。以下是我简化的例子(完整的例子得到了更多的属性和数组属性 JS 链接到JSFIDLE

  • 本文向大家介绍watch怎么深度监听对象变化相关面试题,主要包含被问及watch怎么深度监听对象变化时的应答技巧和注意事项,需要的朋友参考一下 deep设置为true 就可以监听到对象的变化