【问题标题】:How module have access to another module even though it has no dependencies模块如何访问另一个模块,即使它没有依赖关系
【发布时间】:2014-12-25 03:33:58
【问题描述】:

我对模块如何以角度加载有点困惑。以如下代码为例:

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

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

【问题讨论】:

  • 刚刚添加了 html @Naeem-Shaikh
  • 您应该阅读Dependencies 部分。

标签: angularjs angularjs-module


【解决方案1】:

您已将两个模块,即[ "app.widgets", "app.core"] 包含到您的应用程序模块中,然后您在应用程序中使用WidgetController。尽管您没有对 app.widgets 模块进行任何显式依赖,但您仍然可以从 app 模块内的模块 app.core 访问工厂 foo,因为您的 app 模块依赖于 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"] 的容器,您可以在其中访问所有控制器、工厂等,就好像它们是 app 模块本身的一部分一样。

【讨论】:

    【解决方案2】:

    我认为是这样的:

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

    2) 将“app.widgets”注入到“app”模块中,然后它可以访问“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.foo app.core.foo。它覆盖了 app.core.foo!

    【讨论】:

      猜你喜欢
      • 2011-05-08
      • 1970-01-01
      • 2019-06-30
      • 2015-12-28
      • 1970-01-01
      • 2011-01-31
      • 2013-03-26
      • 1970-01-01
      • 2019-02-11
      相关资源
      最近更新 更多