0

我已经构建了一个指令,该指令$parse通过从我的一个$attrs. 表达式通常是应用于列表模型的简单过滤器,当父模型$scope被修改时,其评估将发生变化。

为了监视它何时应该更新它正在使用的数据,我的指令使用了一个$scope.$watch调用,它带有一个自定义函数,该函数 re-$parse是表达式。我遇到的问题是$parse它将从表达式生成一个新的对象实例,因此$watch即使每个对象中的数据完全相等,也会看到值发生了变化。由于回调$digest中采取的操作,这导致我的代码很快达到迭代上限。$watch

为了解决这个问题,我目前正在执行以下操作:

 var getter = $parse($attrs.myExpression);
 $scope.$watch(function () {
    var newVal = getter($scope);
    if (JSON.stringify($scope.currentData) !== JSON.stringify(newVal)) {
      return newVal;
    } else {
      return $scope.currentData;
    }
  }, function (newVal) {
    $scope.currentData = newVal;
    // other stuff
  });

但是,我不喜欢在这里依赖JSON作为中介,也不喜欢使用我$watch的 'ed 函数本身来评估新旧值的等效性。是否有一个标志$watch可以用来确定两个对象是否相等,或者是否有更好的方法来处理这种情况?

4

1 回答 1

4

嗨,你应该使用这个,

scope.$watch('data', function (newVal) { /*...*/ }, true);

这已在stackoverflow上得到解答

于 2013-10-06T21:17:37.283 回答