【问题标题】:Angular $scope.$apply on asynchronous processAngular $scope.$apply 异步进程
【发布时间】: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 中设置了一个统计对象。在统计对象中有参数,例如 - 图片计数等...... 在进程结束时,它调用委托函数

【问题讨论】:

    标签: angularjs asynchronous scope


    【解决方案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。所以每次统计过程完成时,我都想更新相关的活动
    猜你喜欢
    • 2014-05-29
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多