Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度1:$喷油器罐';在提供程序内部注入提供程序时,找不到提供程序依赖项_Angularjs_Dependency Injection - Fatal编程技术网

Angularjs 角度1:$喷油器罐';在提供程序内部注入提供程序时,找不到提供程序依赖项

Angularjs 角度1:$喷油器罐';在提供程序内部注入提供程序时,找不到提供程序依赖项,angularjs,dependency-injection,Angularjs,Dependency Injection,我的用例是:我们有几个助手类,A和B,它们是服务,A依赖于B,我想让它们成为提供者,以便它们可以在.config阶段使用 我随后在提供程序中加载了一个提供程序 正如您在这里看到的,它可以工作: 如果我将Car和ParameterService按此顺序放在一个文件中,则此操作有效 但是,当我将Car和ParameterService拆分为磁盘上的多个文件时,或者在同一文件中Car之前定义ParameterService时,$injector.get('CarProvider')内部Paramet

我的用例是:我们有几个助手类,A和B,它们是服务,A依赖于B,我想让它们成为提供者,以便它们可以在.config阶段使用

我随后在提供程序中加载了一个提供程序

正如您在这里看到的,它可以工作:

如果我将
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演示了吗?