Angular $scope.$apply 异步进程

Posted

技术标签:

【中文标题】Angular $scope.$apply 异步进程【英文标题】:Angular $scope.$apply on asynchronous process 【发布时间】:2015-10-29 13:30:38 【问题描述】:

我正在尝试更新作用域的对象。来自异步进程的新数据,在本例中是来自 facebook 的数据。

如何将更改应用到 html

    var getCampaignStatistics = function () 
        for (i = 0; i < $scope.campaigns.length; i++) 

            $scope.$apply(function () 
                $scope.campaigns[i].campaignStatistics = new CampaignStatistics(delegate);
                $scope.campaigns[i].campaignStatistics.startProcess();
            );
        
    ;


    var delegate = function () 

    ;

所以我有一个委托函数,一旦每个统计过程完成,它就会被调用。 我也尝试应用该过程,但我知道由于对 facebook 的异步请求,它无济于事

我应该添加这个过程,但这是一个需要大量计算的漫长过程。 基本上,它只是在campaignStatistics 中设置了一个统计对象。在统计对象中有参数,例如 - 图片计数等...... 在进程结束时,它调用委托函数

【问题讨论】:

【参考方案1】:

不确定您的委托/回调应该做什么,但我认为它也需要参数。我会尝试在那里运行 $apply ,因为一旦进程完成,Facebook API 就会调用它。 Angular 不会知道这一点,因为该进程在其范围之外运行。

因此,您必须将对 $apply 的调用转移到委托,以确保无论何时 Facebook API 准备好使用您的回调,它都知道更新。

var getCampaignStatistics = function () 
    for (i = 0; i < $scope.campaigns.length; i++) 
        $scope.campaigns[i].campaignStatistics = new CampaignStatistics(delegate);
        $scope.campaigns[i].campaignStatistics.startProcess();
    
;


var delegate = function (param) 
    $scope.$apply(function() 
        //your logic here
        $scope.sompeProperty = param;
    );
;

【讨论】:

进程完成后才调用委托函数,并计算活动统计中的所有统计信息。我的代码中有一个 ng-repeat。所以每次统计过程完成时,我都想更新相关的活动

以上是关于Angular $scope.$apply 异步进程的主要内容,如果未能解决你的问题,请参考以下文章

角度 2.0 相当于 $scope.$apply

angular.js 中同步视图和模型数据双向绑定,$watch $digest $apply 机制

浅析$watch ,$apply 和 $digest (Angular篇)

[转]angular之$apply()方法

angualr 之 $$phase

AngularJS中的digest循环$apply