主要问题 - 有可能吗?我试着没有运气..
主app.js
...
var app = angular.module('myApp', ['services']);
app.config(['customProvider', function (customProvider) {
}]);
...
提供商本身
var services = angular.module('services', []);
services.provider('custom', function ($http) {
});
我有这样的错误:
Uncaught Error: Unknown provider: $http from services
有什么想法吗?
谢谢!
答案 0 :(得分:158)
Angular框架有一个2阶段初始化过程:
在config
阶段,所有提供程序都已初始化,并且所有config
部分都已执行。 config
部分可能包含配置提供程序对象的代码,因此可以使用提供程序对象注入它们。
但是,由于提供者是服务对象的工厂,并且在此阶段提供者未完全初始化/配置 - > 您不能要求提供商在此阶段为您创建服务 - >在配置阶段,您不能使用/注入服务。
完成此阶段后,所有提供程序都已准备就绪(配置阶段完成后无法再进行提供程序配置)。
在run
阶段,所有run
部分都会被执行。在此阶段提供商已做好准备并可以创建服务 - >在run
阶段,您可以使用/注入服务。
$http
服务注入提供程序初始化函数将不会工作//ERRONEOUS angular.module('myModule').provider('myProvider', function($http) { // SECTION 1: code to initialize/configure the PROVIDER goes here (executed during `config` phase) ... this.$get = function() { // code to initialize/configure the SERVICE goes here (executed during `run` stage) return myService; }; });
由于我们试图将$http
服务注入到config
阶段执行的函数中,我们将收到错误:
Uncaught Error: Unknown provider: $http from services
这个错误实际上说的是用于创建$httpProvider
服务的$http
尚未就绪(因为我们仍处于config
阶段)。
$http
服务注入服务初始化函数将工作://OK
angular.module('myModule').provider('myProvider', function() {
// SECTION 1: code to initialize/configure the PROVIDER goes here (executed during `config` phase)
...
this.$get = function($http) {
// code to initialize/configure the SERVICE goes here (executed during `run` stage)
return myService;
};
});
由于我们现在将服务注入到服务初始化函数中,该函数在run
阶段执行,因此该代码将起作用。
答案 1 :(得分:62)
这可能会给你一点杠杆:
var initInjector = angular.injector(['ng']);
var $http = initInjector.get('$http');
但是要小心,成功/错误回调可能会让你处于应用启动和服务器响应之间的竞争状态。
答案 2 :(得分:-2)
在回答您的问题时,"任何想法?",我会回复"是"。但等等,还有更多!
我建议在配置中使用JQuery。例如:
var app = angular.module('myApp', ['services']);
app.config(['$anyProvider', function ($anyProvider) {
$.ajax({
url: 'www.something.com/api/lolol',
success: function (result) {
$anyProvider.doSomething(result);
}
});
}]);