在$ http中使用有角度的工厂

时间:2018-11-02 08:17:02

标签: angularjs angular-factory

我需要翻译价值工厂。该工厂从服务器接收translateData。和角度控制器调用convertValue函数。但是$ http是异步方法,因此控制器获取未定义的值。因为尚未收到http响应。

我想知道我能否在工厂初始化完成(=从服务器下载数据)并按顺序创建控制器。

angular.module("app")
.factory("service", function ($http) {
    var allDataMap = {};

    $http({
        method: 'GET',
        url: '/data'
    }).then(function (response) {
        angular.forEach(response.data.datas, function (value) {
            allDataMap[value.key] = value.value;
        });
    });


    return {
        convertValue: function (key) {
            return key + '(' + allDataMap[key] + ')';
        },  
    };
});

1 个答案:

答案 0 :(得分:0)

您正在考虑异步调用以同步方式完成。那不会发生,您必须等到ajax调用完成后,您才能使用promise轻松实现这一点。

angular.module("app")
.factory("service", function ($http) {
    var allDataMap = {};
    // create a promise
    var promise = $http({
        method: 'GET',
        url: '/data'
    }).then(function (response) {
        angular.forEach(response.data.datas, function (value) {
            allDataMap[value.key] = value.value;
        });
        return allDataMap;
    });


    return {
        convertValue: function (key) {
            // wait until promise finish 
            return promise.then(function() {
               return key + '(' + allDataMap[key] + ')';
            });
        },  
    };
});