【发布时间】:2016-07-15 16:38:55
【问题描述】:
我正在使用 Angular 1.3 处理一个遗留项目,并且一直在决定什么是在更新后保持服务变量和 $scope 同步的最佳方法,或者如果接收数据需要比摘要周期更长的时间。
我正在我的服务中实现变量缓存,它会为类似这样的变量返回一个 getter:
return function () {
if(!this.games)
{
this.games= [];
if(!!this.gameTypeId)
this.getAll(this.gameTypeId);
else
this.getAll();
};
return this.games;
}
如果 getAll 函数花费的时间比摘要周期长,则视图不会更新。因此,一种解决方法是使用 $apply,但感觉我以错误的方式处理这个问题。因为承诺看起来像这样:
return Resource.query({id: gameTypeId, resourceName: "Games/ByGameType"})
.$promise.then(function(response){
if(!$rootScope.$$phase) {
$rootScope.$apply(function () {
angular.extend(this.games, response);
});
}
else
angular.extend(this.games, response);
});
您必须检查 $digest 循环是否真的结束(如果承诺更快地返回值,则视图会自行更新)。
另一种方法是在控制器周围散布承诺返回并在那里更新 $scope.games,在这一侧控制器变得更加拥挤。而不是在 getter 中返回一个函数,而是返回一种将 $scope.games 重新绑定到 service->this.games 值的方法。第一种方法现在已经实现并且有效,但不确定它是否是最好的方法。
【问题讨论】:
标签: javascript angularjs service