我$watch
荷兰国际集团的对象更改和设置$scope.changed = true
,但是有些情况下,我想将它设置为false
我已经改变了数据之后编程:
$scope.$watch('data', function() {
$scope.changed = true;
}, true);
function loadData(data) {
$scope.data = data;
// I want to run $scope.$apply() here so the $watch is triggered
// before changed is set back to false
$scope.$apply();
$scope.changed = false;
}
// in DOM:
<div ng-click="loadData(newData)">
如果我使用非角度事件手动运行loadData
,它可以很好地工作(当然$apply
之后会再次显示范围),但是如果从类似上面的ngClick
之类的东西运行它,则会出现“$ apply already in progress”错误。
使用$timeout
在大多数情况下都能正常工作,但也有一些地方我真的希望它同步发生。
function loadData(data) {
$scope.data = data;
// what I want to avoid:
$timeout(function() {
$scope.changed = false;
})
}
是否可以同步应用范围更改,还是我在做更改处理错误?
谢谢。
谢谢,效果很好,经过一段时间摆弄之后,开销应该不会太差。我修改了它,所以在'changed'被重置后的第一次数据更改后,它不需要运行比较。谢天谢地,我不需要知道它是否恢复到原来的状态。 [Plnkr](http://plnkr.co/edit/OI2zobbwsm0NKgqlXj6v?p=preview) –