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']);