【发布时间】:2015-08-05 14:03:18
【问题描述】:
我对 Angular Promise 有疑问,需要有关如何最好地使用它们的帮助。
我有一个domainService,它从服务器端检索数据,如下所示:
parentsNeeds: function () {
return $http.get('/api/utils/parents-needs', {
cache: true
});
},
我有一个constantsService,它使用domainService 将数组转换为对象,如下所示:
.factory('constantsService', ['domainService', '$q', function (domainService, $q) {
var convertToObject = function (param) {
var parentsNeeds = {};
for (var i = 0; i < param.data.length; i++) {
parentsNeeds[param.data[i]] = i;
}
return parentsNeeds;
};
return {
PARENTS_NEEDS: domainService.parentsNeeds().then(convertToObject)
};
}]);
在 UI 路由器配置中,我有以下解决方法:
resolve: {
constants: ['constantsService', function (constantsService) {
return {PARENTS_NEEDS: constantsService.PARENTS_NEEDS};
}]
}
在我的控制器中,我注入 constants 解析并按如下方式使用它:
constants.PARENTS_NEEDS.then(function(param){
var PARENTS_NEEDS = param;
});
问题是PARENTS_NEEDS var 在我的控制器中可用,并且假设它是从承诺中获得的,我必须在回调中使用传递给 then 方法,PARENTS_NEEDS var 仅在回调中可用范围。
有人可以帮忙吗?
【问题讨论】:
-
在 ui-router resolve 你实际上可以简单地返回一个承诺。在 promise 解决之前,ui-router 不会加载视图。我想你可以尝试直接返回“constantsService.PARENTS_NEEDS”
-
@Okazari,是的,它工作正常。谢谢。但是,如何将多个常量封装到一个常量对象中,以避免将不合理数量的常量注入我的控制器(我有很多......)?
-
如果这些是
constants,您不能让服务在一个承诺中将它们全部作为一个对象返回吗? -
嗨@charlietfl,怎么样?我不知道该怎么做..
-
它们都需要api调用吗?如果是这样可以使用
$q.all
标签: angularjs angular-ui-router angular-promise