当前位置:  开发笔记 > 编程语言 > 正文

vue.js $ watch对象数组

如何解决《vue.js$watch对象数组》经验,为你挑选了2个好方法。

您应该传递一个对象而不是布尔值options,因此:

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

或者你可以vue像这样将观察者设置到实例中:

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

[试玩]



1> Pantelis Pes..:

您应该传递一个对象而不是布尔值options,因此:

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

或者你可以vue像这样将观察者设置到实例中:

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

[试玩]


`ready`在vue 2.0中将名称更改为`mounted`!

2> 小智..:

如果有人需要获取阵列中已更改的项目,请检查:

JSFiddle示例

帖子示例代码:

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
    }
  },
  ...
})


在每次更新时差异整个数组似乎有点过分.我想知道是否有办法让Vue直接告诉我哪个元素已更新...
推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有