【发布时间】:2016-07-16 16:34:34
【问题描述】:
用例:
$scope.$watch('settings', function (newVal, oldVal) {
if (!angular.equals(oldVal, newVal)) {
setDirty();
}
}, true);
现在这实际上是一样的
$scope.$watch('settings', function (newVal, oldVal) {
if (oldVal) {
setDirty();
}
}, true);
因为$watch 已经比较了两者。
但是,有一个属性,即使它发生变化,我也不想setDirty()。
到目前为止,这是我的工作(hacky)解决方案:
$scope.$watch('settings', function (newVal, oldVal) {
if (!oldVal) return;
var editedOldVal = angular.copy(oldVal, {});
var editedNewVal = angular.copy(newVal, {});
delete editedOldVal.propertyIDontWannaWatch;
delete editedNewVal.propertyIDontWannaWatch;
if (!angular.equals(editedOldVal, editedNewVal)) {
setDirty();
}
}, true);
有没有更简洁的方法让angular.equals() 或$watch 忽略特定属性?
编辑:
This answer 没有解决我的问题,因为option 1 根本不是解决方案,说如果我不想看的属性没有改变 - 什么也不做,但这正是我想忽略的属性(不管它是否改变了)。 option 2 使该属性完全不可比,我只想在这种特定情况下忽略它,而不是让它在定义上不可比。
【问题讨论】:
-
有想过这个吗?
-
@lostintranslation 不幸的是,没有,最终还是坚持使用 hacky 解决方案,这实际上并没有那么糟糕..
标签: javascript angularjs object comparison watch