2014-10-29 74 views
3

我对模块如何加载角度有点困惑。就拿下面的代码:模块如何访问另一个模块,即使它没有依赖关系

var app = angular.module("app", [ "app.widgets", "app.core"]); 


    var core = angular.module("app.core", []); 
    core.factory("foo", function(){ 
     return { 
     ping: function(){ 
     return "pong"; 
     } 
     } 
    }); 

    var widgets = angular.module("app.widgets", []); 
    widgets.controller("WidgetController", function($scope, foo){ 
     $scope.items = [1,2,3,foo.ping()]; 
    }); 

<body ng-app="app"> 
    <ul ng-controller="WidgetController"> 
    <li ng-repeat="item in items"> 
     {{item}} 
    </li> 
    </ul> 
</body> 

我很困惑,我的“app.widgets”模块如何访问,即使它未声明为一个依赖的“app.core”模块。

它似乎在拾取依赖项,因为“app.widgets”和“app.core”都在第三个模块中声明---这非常方便。但对我来说这似乎不是很直观。

所以我想我的问题是“如果它们在第三个模块中声明,那么两个模块是否会相互知道?”。那是记录的行为?

+0

你的html在哪里 – 2014-10-29 12:30:46

+0

刚刚添加了html @ Naeem-Shaikh – 2014-10-29 12:41:15

+0

你应该阅读[Dependencies](https://docs.angularjs.org/guide/module#dependencies)部分。 – 2014-10-29 12:48:28

回答

2

我觉得是这样的:

1)“应用程序”有“app.core”注入,所以所有“app.core”服务,工厂等,可用于“应用”模块。

2)进入“应用程序”模块,您还注入了“app.widgets”,然后访问“app”模块可以访问的所有内容。

所以:应用程序能存取app.core & & app.widgets可以访问应用程序 - > app.widgets可以访问app.core

我不知道,如果它记录的地方,如果是,我很乐意阅读它。 看看这个脚本更有趣的东西:

http://plnkr.co/edit/Z8cZHJTekUa68eXuiCmW?p=preview

看来父模块上宣布FOO没有被从子模块Foo的覆盖。 如果注入模块都具有FOO,后者用于:

var app = angular.module("app", [ "app.core", "app.widgets"]); 

使app.widgets.foo的app.foo app.core.foo。它覆盖app.core.foo!

3

您已经在应用程序模块中包含了两个模块,即[ "app.widgets", "app.core"],然后您在应用程序内部使用了WidgetController。尽管你没有明确依赖app.widgets模块,但仍然可以通过应用模块中的模块app.core访问工厂foo,因为你的应用模块取决于app.core。 如果你尝试,

<body ng-app="widgets "> 
    <ul ng-controller="WidgetController"> 
    <li ng-repeat="item in items"> 
     {{item}} 
    </li> 
    </ul> 
</body> 

这不会工作,因为会有什么样的ng-app="widgets"定义工厂FOO。 因此,为了理解,可以将应用程序模块看作是您的模块[ "app.widgets", "app.core"]的容器,您可以在其中访问所有控制器,工厂等,就好像它们是应用程序模块本身的一部分一样。