AngularJS - 由于promise对象而产生的无限循环

Sau*_*nda 2 promise angularjs

我是AngularJS的新手,所以这实际上可能指向一些我尚未完全理解的核心概念.我正在尝试使用$q&promiseobjects 处理"远程数据",如本地数据.直到没有获取远程数据的时间,该promise对象无法解析,但一旦解析,我希望视图中的所有依赖数据绑定都得到更新.但是,以下方法导致无限循环remote_total被重复调用,即使通过前一次调用remote_total导致已解析的promise对象也是如此.

这是我的观点

<div ng-controller="MyController">
  {{ remote_total() }}
</div>
Run Code Online (Sandbox Code Playgroud)

这是控制器的相关代码段:

function MyController($scope, $q, $http) {
  $scope.remote_total = function() {
    var def = $q.defer();
    $http.get('/my/remote/service.json').success(function(data) {
      def.resolve(data);
    });
    return def.promise;
  }
}
Run Code Online (Sandbox Code Playgroud)

首先,如果有人能够向我解释为什么这会进入一个无限循环,那就太好了.其次,实现我想做的最好的方法是什么?

Val*_*nov 5

注意:请参阅下面的Angular 1.2+更新

实际上AngularJS的承诺(即$q提供)它们被AngularJS认可是有趣的.另一个是它们可以链接!

所以在你的代码中你可以做到

$scope.remote_total = $http.get('/my/remote/service.json').then(function(data) {
  return data;
});
Run Code Online (Sandbox Code Playgroud)

而在视野中<div>{{remote total}}</div>(注意:不是功能,只是价值).

AngularJS将自动识别它的承诺,解析$ http.get promise,然后链接到你的函数并将结果值放入模板中.

就这样 :)

更新:默认情况下,在AngularJS 1.2中禁用Promises的自动解包,并在1.3中完全删除.

可行的代码:

$http.get('/my/remote/service.json').then(function(response) {
  $scope.remote_total = response.data;
});
Run Code Online (Sandbox Code Playgroud)