我有一个函数$scope.render()
,它使用值$scope.myProperty
来渲染图表。如果myProperty
在摘要周期中发生变化,我希望在摘要周期结束时调用$scope.render()
,每个摘要周期最多调用一次。
$scope.$watch('myProperty', function(v, vold) {
if ($scope.switch) {
$scope.myProperty ++;
$scope.switch = false;
}
$scope.render();
});
在这种情况下,如果$scope.switch
,则$scope.render()
将被调用两次。我怎么只能打电话一次?
答案 0 :(得分:0)
解决方案是Angular的便捷$timeout服务。
var dirty = false;
$scope.$watch('myProperty', function(v, vold) {
if ($scope.switch) {
$scope.myProperty ++;
$scope.switch = false;
}
dirty = true;
$timeout(function() {
if (dirty) {
$scope.render();
dirty = false;
}
});
});
现在,只要$scope.render
发生更改,就会调用myProperty
,无论多少次{@ 1}},它都会在摘要周期结束时被称为一次。 {1}}更改。