我是AngularJS的新手,所以这实际上可能指向一些我尚未完全理解的核心概念。我正试图使用$q
& amp;处理“远程数据”,如本地数据。 promise
个对象。直到没有提取远程数据的时间,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;
}
}
首先,如果有人能够向我解释为什么这会进入无限循环会很棒。其次,实现我想要做的最好的方法是什么?
答案 0 :(得分:3)
Angular执行脏检查以实现双向绑定。在每个循环中,它存储要监视的属性的先前值,并将其与新值进行比较。如果该属性是函数,则调用它并对结果进行比较。
你确实放了一个要监视的函数,在每个循环中,你的函数被调用,因此导致了http请求。
您要做的是自己创建承诺,并将该承诺附加到观看范围(或在视图中显示)。
此外,$ http服务已经返回一个承诺,您不需要创建另一个承诺。
function MyController($scope, $q, $http) {
$scope.getRemoteTotal = function() {
var def = $http.get('/my/remote/service.json').then(function(response) {
$scope.remoteTotal = response.data;
});
}
$scope.getRemoteTotal();
}
<div ng-controller="MyController">
{{ remoteTotal }}
</div>