3

モジュールがAngularでどのようにロードされるかについて少し混乱しています。たとえば、次のコードを見てください。

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」の両方が 3 番目のモジュールで宣言されているため、依存関係が検出されているようです。これは非常に便利です。しかし、それは私にはあまり直感的ではないようです。

したがって、私の質問は、「2 つのモジュールが 3 番目のモジュールで宣言されている場合、互いのことを「認識」するか?」ということだと思います。そして、それは文書化された動作ですか?

4

2 に答える 2

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 に答える