底线是:
- 您 不能 将服务注入提供者配置部分。
- 您 CAN 注入服务成初始化提供者的服务的部分。
细节:
Angular框架有两个阶段的初始化过程:
阶段1:配置
在此
config阶段,将初始化所有提供程序,并
config执行所有部分。这些
config部分可能包含配置提供程序对象的代码,因此可以将它们与提供程序对象一起注入。但是,由于提供者是服务对象的工厂,并且在此阶段,提供者尚未完全初始化/配置->
**您不能在此阶段要求提供者为您创建服务-
在配置阶段您不能使用/注入服务**。此阶段完成后,所有提供程序都准备就绪(配置阶段完成后,无法再进行任何提供程序配置)。
第二阶段:跑步
在
run阶段期间,
run将执行所有部分。在此阶段 ,提供者已准备就绪,可以创建服务- >在此
run阶段,您可以使用/注入服务。
例子:
1.将$http
服务注入提供者初始化功能 将 无法正常工作
//ERRONEOUSangular.module('myModule').provider('myProvider', function($http) { // SECTION 1: pre to initialize/configure the PROVIDER goes here(executed during
configphase)
…this.$get = function() { // pre to initialize/configure the SERVICE goes here (executedduring
runstage)return myService; };});
由于我们试图将
$http服务注入到在该
config阶段执行的函数中,因此会出现错误:
Uncaught Error: Unknown provider: $http from services
该错误实际上是在说
$httpProvider用于创建
$http服务的尚未准备就绪(因为我们仍处于
config阶段中)。
2.将$http
服务注入服务初始化功能 将 起作用:
//OKangular.module('myModule').provider('myProvider', function() { // SECTION 1: pre to initialize/configure the PROVIDER goes here (executed during `config` phase) ... this.$get = function($http) { // pre to initialize/configure the SERVICE goes here (executed during `run` stage) return myService; };});由于我们现在将服务注入到服务初始化函数中,该函数在
run阶段中执行,因此该代码将起作用。



