我正在尝试在我的模型上实现一个状态属性,使用$ watch在任何属性更改时标记模型脏:
$scope.$watch(
function (scope) {
return scope.item;
},
function (newItem, oldItem) {
if (newItem !== oldItem) {
newItem.setStateDirty();
}
});
(有点明显)问题是对state属性的任何更改也会触发监视。
如果没有显式比较所有属性以确定是否只有状态属性发生了变化,是否有可能忽略对state属性的更改?
答案 0 :(得分:1)
在$watch
功能中,您可以返回一个新对象,其中包含item
的所有属性,但您不想观看的属性除外。
$scope.$watch(
function (scope) {
// return a new object in which the dirty property is always undefined
// and therefore will not trigger the watch
return angular.extend({}, scope.item, {dirty: undefined});
},
function (newItem, oldItem) {
if (newItem !== oldItem) {
newItem.setStateDirty();
}
});
答案 1 :(得分:0)
我通过从不同的方向解决问题来解决这个问题。我现在使用object.defineProperty()
定义模型属性,而不是为我的模型使用简单的JavaScript对象。这允许我在特定属性的setter中显式设置脏标志。
例如:
Object.defineProperty(this, "title",
{
set: function (value) {
_title = value;
this.dirty = true;
}
});