Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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
Javascript 为什么我能够在不注入模块的情况下访问角度服务?_Javascript_Angularjs_Dependency Injection - Fatal编程技术网

Javascript 为什么我能够在不注入模块的情况下访问角度服务?

Javascript 为什么我能够在不注入模块的情况下访问角度服务?,javascript,angularjs,dependency-injection,Javascript,Angularjs,Dependency Injection,我正在玩,发现我能够使用角度服务,甚至不用注入它的模块。我创建了3个模块,即moduleA、moduleB、appmoduleA和moduleB相互独立,但app模块依赖于moduleA和moduleB。这就是我创建模块的方式 angular.module('moduleA',[]); angular.module('moduleB',[]); angular.module('app',['moduleA', 'moduleB']); 在moduleA中,我有一个服务ServiceA,在mo

我正在玩,发现我能够使用角度服务,甚至不用注入它的
模块
。我创建了3个模块,即
moduleA、moduleB、app
moduleA
moduleB
相互独立,但
app
模块依赖于
moduleA
moduleB
。这就是我创建模块的方式

angular.module('moduleA',[]);
angular.module('moduleB',[]);
angular.module('app',['moduleA', 'moduleB']); 
moduleA
中,我有一个服务
ServiceA
,在
moduleB
中,我有一个服务
ServiceB
。这就是我定义服务的方式:


moduleA如果您在app中注入moduleA和moduleB,app中的所有模块都将能够访问moduleA和moduleB的服务。这就是为什么不需要在moduleA中注入moduleB。这就是角度依赖关系的工作方式

如果您希望moduleA只注入moduleB(因为mainController中不需要它),您只需从app module中删除moduleA和ServiceA,然后只将它们注入moduleB即可

var app = angular.module('moduleB', ['moduleA']);

请参见此处

加载模块后,其服务可供注入。一旦在当前的
$injector
上定义了服务提供商,它就不会保存它所属模块的任何信息

上面的代码是可行的,但它指明了一个坏习惯,因为如果未加载
moduleA
,它将变得不可行。根据经验,模块应该加载它们所依赖的模块。可以在多个相关模块中加载一个模块,但只能加载一次

使用
config
块中的provider injector(服务提供者和服务实例有两种情况),事情会变得更加复杂

对于这张装货单

angular.module('app',['moduleA', 'moduleB']); 
angular.module('app',['moduleB', 'moduleA']); 
这将按预期工作,因为
ServiceA
config
块运行时已定义了服务提供程序:

angular.module('moduleB', []).config(function (ServiceAProvider) { ... });
这张装货单呢

angular.module('app',['moduleA', 'moduleB']); 
angular.module('app',['moduleB', 'moduleA']); 

喷油器错误将被抛出,因为
config
块在
app.service('ServiceA',…)
定义
ServiceAProvider
服务提供程序之前运行
app.service
方法可能在
config
之前运行,但服务定义已排队,不会立即生效。

Gotcha。非常感谢:)
angular.module('app',['moduleB', 'moduleA']);