Angularjs 角度1:$喷油器罐';在提供程序内部注入提供程序时,找不到提供程序依赖项
我的用例是:我们有几个助手类,A和B,它们是服务,A依赖于B,我想让它们成为提供者,以便它们可以在.config阶段使用 我随后在提供程序中加载了一个提供程序 正如您在这里看到的,它可以工作: 如果我将Angularjs 角度1:$喷油器罐';在提供程序内部注入提供程序时,找不到提供程序依赖项,angularjs,dependency-injection,Angularjs,Dependency Injection,我的用例是:我们有几个助手类,A和B,它们是服务,A依赖于B,我想让它们成为提供者,以便它们可以在.config阶段使用 我随后在提供程序中加载了一个提供程序 正如您在这里看到的,它可以工作: 如果我将Car和ParameterService按此顺序放在一个文件中,则此操作有效 但是,当我将Car和ParameterService拆分为磁盘上的多个文件时,或者在同一文件中Car之前定义ParameterService时,$injector.get('CarProvider')内部Paramet
Car
和ParameterService
按此顺序放在一个文件中,则此操作有效
但是,当我将Car
和ParameterService
拆分为磁盘上的多个文件时,或者在同一文件中Car
之前定义ParameterService
时,$injector.get('CarProvider')
内部ParameterService
失败
我如何解决这个问题
我希望每个文件都有一个提供者/服务,但我不知道缺少了什么。在不同的文件中可以有提供者。您只需要将它们附加到您创建的第一个模块 如果您的标记如下所示:
<script src="coreModule.js"></script>
<script src="parameterService.js"></script>
记住,第二个参数([]
)告诉angular创建一个新模块
然后,在不同的文件中声明其他提供程序,并将其附加到现有的“CoreModule”模块:
angular.module('CoreModule')
.provider('ParameterService', ['$injector', function($injector) {
...
}
请注意,我们只将一个参数传递给.module()
。这会告诉angular将提供程序添加到现有模块中
在不同的文件中可以有提供者。您只需要将它们附加到您创建的第一个模块 如果您的标记如下所示:
<script src="coreModule.js"></script>
<script src="parameterService.js"></script>
记住,第二个参数([]
)告诉angular创建一个新模块
然后,在不同的文件中声明其他提供程序,并将其附加到现有的“CoreModule”模块:
angular.module('CoreModule')
.provider('ParameterService', ['$injector', function($injector) {
...
}
请注意,我们只将一个参数传递给.module()
。这会告诉angular将提供程序添加到现有模块中
在注入服务实例的运行阶段,服务的定义顺序并不重要。但在配置阶段,服务提供者被注入,即在
provider
构造函数和config
块中,这确实很重要
提供程序和配置块按其定义的顺序执行。如果Car
提供程序是在ParameterService
提供程序或config
块之后定义的,则执行这两个块时,CarProvider
不存在
为了避免潜在的争用情况,应该遵循每个文件一个模块的模式。这样可以使应用程序保持高度模块化(也有利于测试),而不必关心文件的加载顺序。例如:
angular.module('app', ['app.carService', 'app.parameterService']).config(...);
angular.module('app.carService', []).provider('Car', ...);
angular.module('app.parameterService', []).provider('ParameterService', ...);
模块部件按照模块在angular.Module
数组层次结构中定义的顺序执行,从子级到父级
如果
config
块需要它自己的模块,那么决定取决于它做什么(主要是出于测试原因)。在注入服务实例的运行阶段,定义服务的顺序并不重要。但在配置阶段,服务提供者被注入,即在provider
构造函数和config
块中,这确实很重要
提供程序和配置块按其定义的顺序执行。如果Car
提供程序是在ParameterService
提供程序或config
块之后定义的,则执行这两个块时,CarProvider
不存在
为了避免潜在的争用情况,应该遵循每个文件一个模块的模式。这样可以使应用程序保持高度模块化(也有利于测试),而不必关心文件的加载顺序。例如:
angular.module('app', ['app.carService', 'app.parameterService']).config(...);
angular.module('app.carService', []).provider('Car', ...);
angular.module('app.parameterService', []).provider('ParameterService', ...);
模块部件按照模块在angular.Module
数组层次结构中定义的顺序执行,从子级到父级
如果
config
块需要它自己的模块,则决定它是否需要它自己的模块取决于它的功能(主要是出于测试原因)。你能在失败的地方提供一个插件(分离的文件)吗?你能在失败的地方提供一个插件(分离的文件)吗?我明白你的意思,但我不相信这是问题所在。稍后我会尝试制作一个更好的plunk(现在没有计算机访问)你看过Plunkr演示吗?我明白你的意思,但我不相信这是问题所在。稍后我将尝试制作一个更好的plunk(现在没有计算机访问)您看过Plunkr演示了吗?