【问题标题】:$watch and object array$watch 和对象数组
【发布时间】:2016-01-19 01:07:31
【问题描述】:

我在网上查找,但无法找到任何内容。有谁知道是否有 $watch 只返回其属性之一发生变化的对象。

目前让它监视一个对象数组,以便当特定属性更改时它会更新另一个数组的对象。现在,我正在遍历 $watch 传回的新旧数组,并检查发生了什么变化。似乎很浪费,而且我不希望有大量数据。

【问题讨论】:

    标签: angularjs watch


    【解决方案1】:

    来自 AngularJS docs:

    $watch(watchExpression, listener, [objectEquality]):

    • watchExpression - 在每个 $digest 循环中计算的表达式。返回值的变化会触发对监听器的调用

    • listener - 当 watchExpression 的值改变时调用回调; function(newVal, oldVal, scope);参数:

      • newVal 包含 watchExpression 的当前值
      • oldVal 包含 watchExpression 的前一个值
      • scope 指的是当前作用域
    • objectEquality - 使用 angular.equals 比较对象相等性,而不是比较引用相等性

    所以你可以传入你的函数newValoldVal 参数并检查数组中的哪个对象被弹出/推入。

    希望有帮助

    【讨论】:

    • 是的,我正在查看这些参数,但希望可能缺少一个。
    【解决方案2】:

    试试这个技巧。

    $scope.$watch('myArray.length', function(){
      console.log("My array has changed",$scope.myArray);
    });
    

    【讨论】:

    • 感谢您的反馈。它不是监视要插入的新对象,而是监视其中一个对象的其中一个属性更新,即 [{val: 1},{val: 1}] 并且第一个对象的 val 更新为 2。我会有一个 watch 来返回更新的对象的索引
    猜你喜欢
    • 2016-03-20
    • 2016-10-19
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2015-11-28
    • 2022-11-19
    相关资源
    最近更新 更多