我已经构建了一个指令,该指令$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
可以用来确定两个对象是否相等,或者是否有更好的方法来处理这种情况?