如何注入模块并使其可以访问应用程序的所有模块和子模块(获取未知的提供程序错误)

时间:2015-05-15 15:15:34

标签: angularjs dependency-injection

请注意,重复:How to inject module and make it accesible to entrie angular app

我有一个模块app.config,我想将其注入整个应用程序。

模块需要在注入myApp

的所有其他模块和子模块(模块内的模块)中可访问

例如,我的应用程序如下所示:

angular.module('myApp', [
    'app.config',
    'module#1',
    'module#2',
    'module#3',
    'module#4'    
])
.config...

/////////////////////////////////

此处为app.config

angular.module('app.config', []).
    constant('NAME1', 'Name1').
    constant('NAME2', 'Name2'); 
////////////////////

我希望'app.config'module#500方式访问'myApp',这不是module#1的直接依赖,而是myApp的依赖 - 反过来,是module#1的依赖。

module#500定义如此(如图所示,module#1 angular.module('module#1', [ 'module#500', 'module#501', 'module#502', ... ]); 的依赖):

angular.module('module#500', []).
    service('serviceOne', serviceOne);

function ServiceOne($http, NAME1) {

    var service = {
        getMyProfile: function(){return $http.get('api/' + NAME1);}
    };

    return service;
}

这是我的问题:

Uncaught Error: [$injector:unpr] Unknown provider: NAME1Provider <-NAME1 <- serviceOne

问题 - 我收到错误 - &gt; module#500 但我以为我把它注入整个应用程序???

我不想直接添加'myApp'作为module#500的依赖我不想将module#1作为{{1}的依赖关系}。我想将module#1作为myApp

的依赖关系

我不想单独向每个模块注入app.config任何其他解决方案?

3 个答案:

答案 0 :(得分:2)

  

我不想单独为每个人注入app.config   模块要么。还有其他解决方案吗?

我不知道你可以期待什么解决方案?使用这一行:angular.module('module#500', []).模块#500如何知道其他任何事情,它没有给予任何东西。也许我在这里误解了一些东西。

编辑,因为我刚刚阅读了你昨天的帖子和评论:我认为你不能正确理解依赖注入。它只采用一种方式,模块#1可以访问模块#500,但模块#500无法访问模块#1。它必须是这样的:如果它有一些依赖于模块#1的行为,你怎么能对模块#500进行单元测试呢?在模块的任何地方都没有提到它?

猜测你的项目并没有真正需要这么多模块,如果它们都依赖于相同的配置变量。依赖于配置变量的那些工厂和服务应该与它在同一个模块中。这是适当的划分,从长远来看会让你的生活更轻松。

答案 1 :(得分:1)

如果您不想让myApp依赖于app.config(尽管这样做是正确的,因为它的子模块 依赖 < / strong>就可以了,您可以使用手动引导加载配置模块

angular.bootstrap(document, ['myApp', 'app.config']);

而不是ng-app="myApp"

答案 2 :(得分:0)

您忘记在NAME1服务中注入ServiceOne

例如:function ServiceOne($http, NAME1)