angular watch cycle 或 digest cycle 完成后如何调用函数
how to call function when angular watch cycle or digest cycle is completed
在 angular 完成所有监视周期后,是否有任何方法可以在 angular 中调用自定义函数。
要求
我的控制器内有多个手表功能。现在我只想在angular
执行完所有watch函数后才执行一个函数
摘要完成后,有几种方法可以注册回调。
使用$$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 以防止另一个摘要循环触发。
在 angular 完成所有监视周期后,是否有任何方法可以在 angular 中调用自定义函数。
要求 我的控制器内有多个手表功能。现在我只想在angular
执行完所有watch函数后才执行一个函数摘要完成后,有几种方法可以注册回调。
使用$$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 以防止另一个摘要循环触发。