我需要知道的是如何在$ 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)
});
});
}
};
}
]);
答案 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,因为我需要在使用服务之前准备好字典。希望这有助于某人。如果有人知道更好的方法,我很乐意知道。