【发布时间】:2015-05-19 12:51:16
【问题描述】:
在 Angular 完成所有观看周期后,有什么方法可以在 Angular 中调用自定义函数。
要求 我的控制器中有多个手表功能。现在我只想在所有手表功能都由角度执行后才执行一个功能
【问题讨论】:
在 Angular 完成所有观看周期后,有什么方法可以在 Angular 中调用自定义函数。
要求 我的控制器中有多个手表功能。现在我只想在所有手表功能都由角度执行后才执行一个功能
【问题讨论】:
有几种方法可以在摘要完成后注册回调。
使用$$postDigest:
$scope.$$postDigest 在当前 $digest 循环完成后触发回调。
但是,这仅在下一个摘要循环之后运行一次。要使其在每个摘要循环后运行,请与$watch 一起运行。这是基于代码示例given here
var hasRegistered = false;
$scope.$watch(function() {
if (hasRegistered) return;
hasRegistered = true;
$scope.$$postDigest(function() {
hasRegistered = false;
fn();
});
});
$watch 可以在摘要周期内多次触发,因此我们使用标志 hasRegistered 来防止 $$postDigest 回调被多次注册。
注意:$$postDigest 不会触发另一个摘要循环。因此,对 $$postDigest 内的 $scope 的任何修改都不会反映在 dom 中。 $$ 表示这是angularjs中的私有函数,所以函数不稳定,以后可能会改变。
使用$timeout:
$timeout(function(){
console.log("Running after the digest cycle");
},0,false);
这在当前摘要周期完成后运行。 注意:第三个参数设置为 false 以防止另一个摘要循环触发。
【讨论】: