我是AngularJS的新手,所以这实际上可能指向一些我尚未完全理解的核心概念.我正在尝试使用$q&promiseobjects 处理"远程数据",如本地数据.直到没有获取远程数据的时间,该promise对象无法解析,但一旦解析,我希望视图中的所有依赖数据绑定都得到更新.但是,以下方法导致无限循环remote_total被重复调用,即使通过前一次调用remote_total导致已解析的promise对象也是如此.
这是我的观点
<div ng-controller="MyController">
  {{ remote_total() }}
</div>
这是控制器的相关代码段:
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;
  }
}
首先,如果有人能够向我解释为什么这会进入一个无限循环,那就太好了.其次,实现我想做的最好的方法是什么?
注意:请参阅下面的Angular 1.2+更新
实际上AngularJS的承诺(即$q提供)它们被AngularJS认可是有趣的.另一个是它们可以链接!
所以在你的代码中你可以做到
$scope.remote_total = $http.get('/my/remote/service.json').then(function(data) {
  return data;
});
而在视野中<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;
});