2016-10-13 5 views
2

は、私が知っている(と私が間違っているなら、私を修正)angular.module('a', ['b', 'c'])の角度のブートストラップ手順があること:角度モジュールは相互に循環することができますか?

  1. ブートストラップbc
  2. ブートストラップa

ブートストラップは、3段階の手順である:

  1. INIT
  2. コンフィグ各ステップは、依存関係ab, c、その後に最初に発生

  • ラン - 次のステップに移動します。


    私は上記の説明で間違っていましたか? plunkerは、abに依存することを示していますが、baに依存しています(実際には機能します)ので、各モジュールはブートストラップの前に依存関係をブートするので、私の説明は偽です。

    お手伝いできますか?

  • 答えて

    5

    Angularは、モジュールの遅延実行を使用します。これは、想定していた方法とは異なります。

    各モジュールは依存関係のセットで定義されていますが、関数呼び出しの点では「実行される」ものはありません。プログラムは、すべてのモジュールが定義された後に実行されます。

    あなたの前提:AはBに依存しているので、最初にBを実行します。しかし、BはAに依存するので、AまたはBをロードすることは不可能になります。

    実際:モジュールAは、依存関係Bで作成されます。モジュールBは、依存関係Aで作成されます。実行時に、 AとBの両方が存在するためです。 configおよびランブロックについて

    [...] が必要とモジュールの構成ブロックの前に実行に必要なモジュールの構成ブロック。実行ブロックについては、 と同じです。他のモジュールが複数必要な場合でも、各モジュールは一度だけロードすることができます( )。

    実際には、これはスタック(重複なし)と同様に機能します。 AとBの例では、最初にAがスタックに追加され、次にその依存関係Bが追加されます.BはAに依存し、Aはすでにスタックにあるため、何も追加されません。したがって、configブロックはB、Aの順番で実行されます。実行ブロックは同じ順序で実行されます。

    詳細はhttps://docs.angularjs.org/guide/moduleを参照してください。

    +0

    答えを変更して、各モジュールのinit、config、およびstepsの手順を説明できますか?ありがとう – johni

    +0

    @johni実行ブロックと設定ブロックに関する情報を追加しました。 initのステップは、モジュールを定義するだけです。そのステップで注文は問題ではありません(私が答えで説明したように)。 – tcooc

    +0

    また、[module loading code](https://github.com/angular/angular.js/blob/07849779ba365f371a8caa3b58e23f677cfdc5ad/src/auto/injector.js#L755)にもこの動作が記述されています。あなたが好きなら、それをチェックすることができます。最初にすべてをロードしてから、依存関係が開始されている場所の上から下に実行されます。 –

    関連する問題