在大多数angularjs教程中,我看到了promise chain导致更改范围变量。
$http.get(someURL).then(function (value) {
$scope.someValue = value;
});
是否可以将该值返回到父函数?我尝试过的方法只是返回了另一个承诺。
$scope.test = function(){
return $http.get(someURL).then(function (value) {
return value;
});
};
$scope.test = function(){
var deferred = $q.defer();
$http.get(someURL).then(function (value) {
deferred.resolve(value);
});
return deferred.promise;
}
我不想链接另一个承诺,只返回json所以我可以做这样的事情:
<button ng-click='some_vars = test()'>Get ajax</button>
<ul ng-repeat='var in some_vars'>
<li>{{var.title}}</li>
</ul>
答案 0 :(得分:3)
IMO这就是你应该怎么做的:
在您的控制器中执行以下操作:
$scope.some_vars=[];
$scope.loadVars = function(){
$http.get(someURL).success(function (data) {
$scope.some_vars=data;
});
};
在您看来,请执行以下操作:
<button ng-click='loadVars()'>Get ajax</button>
<ul ng-if="some_vars.length>0" ng-repeat='var in some_vars'>
<li>{{var.title}}</li>
</ul>
更容易,对吧?
然而如果您使用1.2.0-rc.3之前的Angular版本。并且您真的想要自动解包承诺(我强烈建议您反对< / strong>),您必须更改模块配置中$parseProvider
的设置,如下所示:
.config(function($parseProvider){
$parseProvider.unwrapPromises(true);
})
版本1.2删除了承诺展开,并且已完全弃用版本1.2.0-rc.3。
您可能需要查看此文档:Migrating from Previous Versions。
$ parse:由于fa6e411d,承诺展开已被删除。它有 自1.2.0-rc.3起被弃用。它无法再打开。二 方法已被删除:
$parseProvider.unwrapPromises $parseProvider.logPromiseWarnings