web-dev-qa-db-ja.com

遅延ロードされたモジュールがcommonModuleをインポートする必要があるのはなぜですか? Angular 2

アプリケーションのルートモジュールにBrowserModuleをインポートすると、NgIfとNgFor(を積極的にロードされたコンポーネント)で使用できます。しかし、遅延ロードされたモジュールでは、ルートのBrowserModuleによってエクスポートされたCommonModuleをインポートする必要があります。 SOなぜそれを遅延ロードされたモジュールに再度インポートする必要があるのですか?

14
Vivek

ウォードベルが言ったように( https://devchat.tv/adv-in-angular/119-aia-avoiding-common-pitfalls-in-angular2 ):

アプリケーションにモジュールが1つだけあり、そこにすべてを投げ込んだ限り、ブラウザーモジュール内に隠された共通モジュールの恩恵を受けていました。 遅延モジュールであるかどうかに関係なく、新しいモジュールを作成してその中に何かを宣言すると、その新しいモジュールはクリーンな状態になります。 Angularまたは何かの知識はありません。これは任意のモジュールであり、何かを宣言する遅延モジュールではありません。コンポーネントのいずれかに実際に必要なすべてをインポートする必要があります。宣言しました。そのため、共通モジュールが必要でした

モジュールは、他のモジュールで宣言されているコンポーネント、ディレクティブ、またはパイプへのアクセスを継承しません。https:// angular。 io/guide/ngmodule#add-the-contactmodule オレンジ色のブロックを参照)

そのため、CommonModulengIfなどのディレクティブにアクセスするには、ngForをインポートする必要があります。あなたのモジュールは他のモジュールからのディレクティブについて何も知りません。インポートされたモジュールからのdeclarationsexportsのみを確認します

以下も参照してください。

21
yurzui

ブラウザモジュールはアプリのルートモジュールで使用され、モジュールを使用している場合、インポートはモジュールに固有です。コンポーネントの遅延読み込みに機能モジュールを使用する場合、共通モジュールを機能モジュールにインポートして、Angular=ブラウザーモジュールwhixhにngForやngIfなどの組み込みディレクティブが含まれることを通知する必要があります。機能モジュールでも。

ブラウザーモジュールのインポートはapp.moduleで1回だけ使用されます。他の場所では、これらの組み込みディレクティブを機能または共有モジュールで使用するため、共通モジュールをインポートする必要があります。

0
Rahul Singh