配置依赖于其他服务angularjs的服务

时间:2014-09-11 20:55:43

标签: javascript angularjs

我需要知道的是如何在$ get函数之外使用$ http这样的服务,还是可能?我的代码去加载一个json文件,该文件提供了我的应用程序以各种方式使用的字典。我希望用户能够自定义此字典,以便我使用jquery的extend方法允许用户向对象添加值并扩展字典。下面代码中的实例化方法处理所有这些。我希望能够做的就是配置我的服务

config(['_sys_dictionaryProvider', function(_sys_dictionaryProvider) {
    _sys_dictionaryProvider.instansiate('config/dictionary/custom/dictionary.json');
}])

但是这需要$http服务在配置时可用,我不认为它是。如果我将$http服务作为$ get属性的一部分,它将起作用,如here所述,除非每次使用该服务时都必须查询网络。有没有办法在配置其他服务时使用服务?

以下完整代码,如果需要澄清,请与我们联系。

app.provider("_sys_dictionary", ['$http',
    function ($http) {
        var dictionary,
            DictionaryService = function () {
                this.definitions = dictionary;
                this.define = function (what) {
                    var definitions = this.definitions;
                    if (what instanceof Array) {
                        for (var i = 0; i < what.length; i++) {
                            definitions = definitions[what[i]];
                        }
                        return definitions;
                    }
                    return this.definitions[what];
                };
            };
        return {
            $get: function () {
                return new DictionaryService();
            },
            instansiate: function (path) {
                $http.get('config/dictionary/dictionary.json').success(function (data) {
                    dictionary = data;
                    $http.get(path).success(function (data) {
                        jQuery.extend(true, dictionary, data)
                    });
                });
            }
        };
    }
]);

1 个答案:

答案 0 :(得分:0)

由于我不相信可以在配置阶段使用服务,因为无法保证您使用的服务已经配置,我改用了这条路线

app.provider("_sys_dictionary", function () {
    var dictionary,
        DictionaryService = function () {
            this.definitions = dictionary;
            this.define = function (what) {
                var definitions = this.definitions;
                if (what instanceof Array) {
                    for (var i = 0; i < what.length; i++) {
                        definitions = definitions[what[i]];
                    }
                    return definitions;
                }
                return this.definitions[what];
            };
        };
    return {
        $get: [

            function () {
                console.log(dictionary);
                return new DictionaryService();
            }
        ],
        instansiate: function (path) {
            jQuery.ajax({
                url: 'config/dictionary/dictionary.json',
                success: function (data) {
                    dictionary = data;
                    jQuery.ajax({
                        url: path,
                        success: function (data) {
                            jQuery.extend(true, dictionary, data);
                        },
                        async: false
                    });
                },
                async: false
            });
        }
    };
});

我最终使用了jquery的ajax对象并将async变为false,因为我需要在使用服务之前准备好字典。希望这有助于某人。如果有人知道更好的方法,我很乐意知道。