1. ホーム
  2. angular

[解決済み] angular ngModuleのentryComponentsとは何ですか?

2022-04-26 20:41:38

質問

私は今 Ionic アプリ( 2.0.0-rc0 に依存している)。 angular 2 . そのため、新たに導入された ngModules が含まれます。私が追加しているのは app.module.ts. を以下に示します。

import { NgModule } from '@angular/core';
import { IonicApp, IonicModule } from 'ionic-angular';
import { MyApp } from './app.component';
import { Users } from '../pages/users/users';

@NgModule({
  declarations: [
    MyApp,
    Users
  ],
  imports: [
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    Users
  ]
})
export class AppModule {}

とは何ですか? entryComponents はここで何をしているのでしょうか? Components はすでに declarations . では、これらを繰り返す必要はあるのでしょうか?もし、ここにコンポーネントを含めない場合はどうなりますか?

解決方法は?

を使用して追加される動的追加コンポーネントが対象です。 ViewContainerRef.createComponent() . に追加すると entryComponents はオフラインテンプレートコンパイラにこれらをコンパイルし、ファクトリを作成するように指示します。

ルートコンフィギュレーションに登録されたコンポーネントは、自動的に entryComponents と同じように router-outlet を使用しています。 ViewContainerRef.createComponent() を使用して、ルーティングされたコンポーネントを DOM に追加します。

オフラインテンプレートコンパイラ(OTC)は、実際に使用されるコンポーネントのみをビルドします。もしコンポーネントが直接テンプレートで使われていなければ、OTCはそれらをコンパイルする必要があるかどうかを知ることができません。entryComponentsを使えば、このコンポーネントもコンパイルするようにOTCに指示でき、実行時に利用できるようになります。

エントリーコンポーネントとは何ですか?(angular.io)

NgModuleのドキュメント(angular.io)

<ブロッククオート

このコンポーネントが定義されたときに、同様にコンパイルされるべきコンポーネントを定義します。ここに記載された各コンポーネントに対して、AngularはComponentFactoryを作成し、ComponentFactoryResolverに格納します。

動的に追加されるコンポーネントを entryComponents というエラーメッセージが表示されます。これはAngularがファクトリーを作成していないためです。

参照 https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html