我对模块如何加载角度有点困惑。以下面的代码为例:
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>
我对我的&#34; app.widgets&#34;模块可以访问&#34; app.core&#34;尽管模块没有被声明为依赖项。
似乎正在接受依赖,因为&#34; app.widgets&#34;和&#34; app.core&#34;在第三个模块中声明 - 非常方便。但它对我来说似乎并不直观。
所以我想我的问题是&#34;两个模块会知道&#39;如果他们在第三个模块中宣布彼此?&#34;。这是记录在案的行为吗?
答案 0 :(得分: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模块视为模块[ "app.widgets", "app.core"]
的容器,您可以在其中访问所有控制器,工厂等,就好像它们是应用程序模块本身的一部分一样。
答案 1 :(得分:2)
我认为它是这样的:
1)“app”注入了“app.core”,因此所有“app.core”服务,工厂等都可用于“app”模块。
2)进入“app”模块,你还会注入“app.widgets”,然后可以访问“app”模块可以访问的所有内容。
所以:app可以访问app.core&amp;&amp; app.widgets可以访问app - &gt; 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!