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”都在第三个模块中声明——这非常方便。但这对我来说似乎不是很直观。

所以我想我的问题是“如果两个模块在第三个模块中声明,它们会相互‘了解’吗?”。这是记录在案的行为吗?

4

2 回答 2

3

您已将两个模块 ie 包含[ "app.widgets", "app.core"]到您的应用程序模块中,然后您正在使用WidgetController应用程序内部。尽管您没有对app.widgets模块进行任何显式依赖,但您仍然可以从 app 模块内部的模块访问工厂 foo,app.core因为您的 app 模块依赖于app.core. 如果你试试 ,

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

这不会起作用,因为在你的ng-app="widgets". 因此,为了便于理解,请将 app 模块视为两个模块的容器[ "app.widgets", "app.core"],您可以在其中访问所有控制器、工厂等,就好像它们是 app 模块本身的一部分一样。

于 2014-10-29T12:51:06.843 回答
2

我认为它是这样的:

1)“app”注入了“app.core”,因此所有“app.core”服务、工厂等都可用于“app”模块。

2)在“app”模块中,您还注入“app.widgets”,然后它可以访问“app”模块可以访问的所有内容。

所以:app 可以访问 app.core && app.widgets 可以访问 app -> 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.fooapp.core.foo。它覆盖了 app.core.foo!

于 2014-10-29T13:46:00.050 回答