在angular完成所有观察周期后,是否有任何方法可以调用angular中的自定义函数。
要求 我的控制器里有多种手表功能。现在,我只想在angular
一旦摘要完成,有几种方法可以注册回调。
使用$$postDigest
:CCD_ 2在当前CCD_ 3周期完成后触发回调。
然而,在下一个摘要周期之后,这只运行一次。为了使它在每个摘要循环后运行,请将它与$watch
一起运行。这是基于这里给出的代码样本
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,以防止再次触发摘要循环。