モジュールは、Angularでモジュールを整理する重要な方法です。一連のまとまりのあるビジネスコンポーネント(コントローラー、サービス、フィルター、ディレクティブなど)をカプセル化する機能を提供します。そうすることで、ビジネスドメインの問題に応じてコードをモジュールに分離し、モジュールの依存関係を使用して関連するモジュールコンテンツを挿入して、「フォーカスを分離」し、より良い「高い結束と低カップリング」を実現できるようにします。 「高い結束と低カップリング」は、オブジェクト指向のデザインの原理から生まれます。凝集とは、モジュールまたはオブジェクトの整合性を指します。密接に関連するロジックのセットは、どこにでも散らばるのではなく、同じモジュール、オブジェクト、およびその他のコードユニットにカプセル化する必要があります。カップリングとは、モジュール、オブジェクト、その他のコードユニット間の依存度の程度を指します。 1つのモジュールの変更が他のモジュールに影響を与える場合、2つのモジュールが相互依存しており、しっかりと結合されていることを意味します。
同時に、モジュールは角度コードの入り口でもあります。まず、モジュールを宣言する必要があります。次に、コントローラー、サービス、フィルター、ディレクティブ、構成コードブロック、実行コードブロックなど、他のコンポーネント要素をAngularの他のコンポーネント要素を定義できます。
モジュールの定義は次のとおりです。Angular.module( 'com.ngbook.demo'、[])。モジュール関数に関しては、3つのパラメーターを渡すことができます。
Angular.moduleメソッドには、一般的な方法、つまりAngular.module( 'com.ngbook.demo'、[オプション依存関係])およびangular.module( 'com.ngbook.demo')があります。それは完全に異なる方法であり、1つは作成モジュールを宣言することであり、もう1つは宣言されたモジュールを取得することであることに注意してください。アプリケーションでは、モジュールの宣言は一度だけでなければなりません。モジュールを取得するには、複数回になる可能性があります。角度コンポーネントをさまざまなファイルで分離し、モジュールファイルでモジュールを宣言し、他のコンポーネントがモジュールを導入することをお勧めします。パッケージまたはスクリプトに導入するときは、最初にモジュール宣言ファイルをロードし、次に他のコンポーネントモジュールをロードする必要があることに注意してください。
Angular Chinese Community Groupでは、「ng:aeq」エラーについて尋ねる学生を聞くことがあります。
[ng:areq]引数「democtrl」は関数ではなく、未定義になりました!
これは、多くの場合、コントローラーの定義を忘れたり、モジュールを複数回宣言することを忘れているためです。モジュールを複数回宣言すると、以前のモジュール定義情報がクリアされるため、プログラムは定義されたコンポーネントが見つかりません。また、Angularソースコード(loader.jsから)からこれを学ぶこともできます。
function setupModuleLoAder(window){... function surse(obj、name、factory){return obj [name] || (obj [name] = factory()); } var angular = sures(window、 'angular'、object); return surese(angular、 'module'、function(){var modules = {}; return function module(name、requireds、configfn){var assertnothasownproperty = function(name、context){if(name === 'hasownProperty'){shrow ngminerr( 'badname'、 'hasownproperty' hasownproperty 'hasow }; assertnothasownproperty( 'module');モジュールを登録するのを忘れています。「 +」は依存関係を2番目の引数として指定します。名前:名前、プロバイダー:Invokelater( '$ roblet'、 'Provider')、Factory:Invokelater( '$ rodic'、 'Factory')、service:invokelater( '$ sulting'、 'service')、value:invokelater( '$ sultion'、 'value')、constant:invokelater( 'constaint'、 'unshift')、 '$')、 ' 「登録」、invokelater($ filterprovider '、' register ')、コントローラー:「$ controllprovider」、' register ')、invokelater(' $ compileprovider '、' directive ') } function invokelater(insertmethod){insertmethod || }; }); }コードでは、Angularが開始されると、グローバルなAngularオブジェクトをセットアップし、AngularオブジェクトにモジュールAPIを公開することを理解できます。モジュールAPIコードについては、述語ステートメントの最初の行をはっきりと見ることができます。モジュール名はHasownPropertyにちなんで命名することはできません。そうしないと、「Badname」のエラーメッセージがスローされます。その後すぐに、モジュールが宣言されていることを示す名前のパラメーターが渡された場合、既存のモジュール情報が削除され、nullに設定されます。
ModuleInstanceの定義から、Angular.moduleによって露出したAPIは、InvokeQueue、Runblocks、Reques、Name、Provider、Factory、Service、Value、Constant、Animation、Filter、Controller、Directive、Config、および実行であることがわかります。その中でも、InvokeQueueとRunblockは名前で合意されたプライベート属性です。自由に使用しないでください。他のAPIは、一般的に使用される角度成分定義方法です。 InvokElaterコードから、このような角度コンポーネント定義の返されたものは、滑らかなAPIを形成するモジュールインスタンスインスタンスであることがわかります。グローバルモジュール変数を宣言する代わりに、チェーン定義を使用してこれらのコンポーネントを定義することをお勧めします。
最後に、3番目のパラメーターconfigfnが渡されると、構成情報に構成されます。 Angularが構成段階に入ると、インスタンス化前にAngularアプリケーションまたはサービスなどの角度コンポーネントを構成するために順番に実行されます。
上記は、Angular Moduleステートメントの編集と、取得した情報が過負荷になっています。今後も関連情報を追加し続けます。このウェブサイトへのご支援ありがとうございます!