Javascript 角度深度比较对象(特定属性除外)
用例:Javascript 角度深度比较对象(特定属性除外),javascript,angularjs,object,comparison,watch,Javascript,Angularjs,Object,Comparison,Watch,用例: $scope.$watch('settings', function (newVal, oldVal) { if (!angular.equals(oldVal, newVal)) { setDirty(); } }, true); 现在,这实际上与 $scope.$watch('settings', function (newVal, oldVal) { if (oldVal) { setDirty(); } }, true);
$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()
这是我目前正在使用的(黑客)解决方案:
$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
忽略特定属性
编辑:
没有解决我的问题,因为选项1根本不是一个解决方案,它说如果我不想看的属性没有更改-什么也不做,但这正是我想要忽略的属性(不管它是否更改)
选项2
使该属性根本不具有可比性,我只想在这个特定情况下忽略它,而不是使其定义为不可比。您可以在属性前面加上$,它将不会包含在相等的比较中。angular.equals方法忽略以$开头的属性。
从Angular.js代码中:
if(key.charAt(0)=='$'| | isFunction(o1[key])继续代码>
例如:
var object1={propertyOne:'1',$myCustomHiddenField:'something'}代码>
var object2={propertyOne:'1',$myCustomHiddenField:'something'}代码>
var result=angular.equals(object1,object2)//这是真的
equals方法可以被引用。是否可能重复?lostintranslation不幸的是,没有,最终还是采用了黑客解决方案,其实也没那么糟糕。我也在努力解决同样的问题。这很有效。救了我一命,先生!