我是$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 已经在进行中”。
在大多数情况下使用 a 是$timeout
可行的,但在某些地方我真的希望它同步发生。
function loadData(data) {
$scope.data = data;
// what I want to avoid:
$timeout(function() {
$scope.changed = false;
})
}
是否可以同步应用范围更改,还是我做的更改处理错误?
谢谢。