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 异步进程的主要内容,如果未能解决你的问题,请参考以下文章
angular.js 中同步视图和模型数据双向绑定,$watch $digest $apply 机制