【问题标题】:how to call function when angular watch cycle or digest cycle is completed角度观察周期或摘要周期完成时如何调用函数
【发布时间】:2015-05-19 12:51:16
【问题描述】:

在 Angular 完成所有观看周期后,有什么方法可以在 Angular 中调用自定义函数。

要求 我的控制器中有多个手表功能。现在我只想在所有手表功能都由角度执行后才执行一个功能

【问题讨论】:

    标签: angularjs angularjs-scope


    【解决方案1】:

    有几种方法可以在摘要完成后注册回调。

    使用$$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 以防止另一个摘要循环触发。

    【讨论】:

    猜你喜欢
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    相关资源
    最近更新 更多