如何使用UI路由器在将promise传递给控制器​​之前解析它

时间:2015-08-05 14:03:18

标签: angularjs angular-ui-router angular-promise

我对Angular承诺存在问题,需要帮助才能最好地使用它们。

我有一个onerror从服务器端检索数据,如下所示:

domainService

我有parentsNeeds: function () { return $http.get('/api/utils/parents-needs', { cache: true }); }, 使用constantsService以便将数组转换为对象,如下所示:

domainService

在UI路由器配置中,我有以下决心:

.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)
        };
    }]);

在我的控制器中,我注入resolve: { constants: ['constantsService', function (constantsService) { return {PARENTS_NEEDS: constantsService.PARENTS_NEEDS}; }] } 解析并按如下方式使用它:

constants

问题是我的控制器中可用的constants.PARENTS_NEEDS.then(function(param){ var PARENTS_NEEDS = param; }); var是从promise中获得的,我必须在回调函数中使用pass来传递then方法,PARENTS_NEEDS var只是在回调范围内可用。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

感谢Charlietfl&amp; Okazari的建议和评论,我想出了以下内容:

我重新设计的服务:

.factory('constantsService', ['domainService', '$q', function (domainService, $q) {

    var convertToObject = function (param) {
        var object = {};
        for (var i = 0; i < param.data.length; i++) {
            object[param.data[i]] = i;
        }
        return object;
    };

    var PARENTS_NEEDS = domainService.parentsNeeds().then(convertToObject);
    var CHILDCARE_WORKER_TYPES = domainService.childcareWorkerTypes().then(convertToObject);
    //and so on and so forth...


    return {
        constants: $q.all({PARENTS_NEEDS: PARENTS_NEEDS, CHILDCARE_WORKER_TYPES: CHILDCARE_WORKER_TYPES})
    };
}]);

在我的UI路由器中:

constants: ['constantsService', function (constantsService) {
    return constantsService.constants;
}]

然后我在控制器中获得了一个很好的constants对象(已解决的承诺)。该对象包含两个常量:

Object {PARENTS_NEEDS: Object, CHILDCARE_WORKER_TYPES: Object}CHILDCARE_WORKER_TYPES: ObjectASSISTANTE_MATERNELLE: 1AUXILIAIRE_PARENTALE: 0AU_PAIR: 3BABY_SITTER: 2__proto__: ObjectPARENTS_NEEDS: ObjectPARENTS_TO_CHILDCARE_WORKER: 0PARENTS_TO_PARENTS: 1__proto__: Object__proto__: Object