Angular 6 を使用して、遅延ロードされたモジュールからコンポーネントをロードする際に問題が発生しています。
CLI を使用してライブラリを作成しました -
ng generate library @org/chat
以下を含むように更新されangular.json
たファイル:
"lazyModules": [
"dist/org/chat"
],
次に、AppComponent を介してモジュールを正常にロードします。
constructor(private _injector: Injector, private loader: SystemJsNgModuleLoader, public dialog: MatDialog) {}
load() {
this.loader.load('dist/org/chat#ChatModule').then(moduleFactory => {
const moduleRef = moduleFactory.create(this._injector);
});
}
これまでのところ問題なく、モジュールがロードされています。
ただし、ChatModule には ChatPopupComponent というコンポーネントがあり、ダイアログを使用して (または ViewChild コンテナーに追加して) それを表示する方法が見つかりません。
ダイアログでコンポーネントを開くには、モジュールの entryComponents で宣言し、AppComponent レベルでインポートする必要があります。
let dialogRef = this.dialog.open(ChatPopupComponent
data: {}
});
しかし、コンポーネントを直接インポート (およびライブラリからエクスポート) すると、次の (明白な) エラーが発生します: ' Component ChatPopupComponent is not part of any NgModule or the module has not been imported into your module
'。これは遅延ロードされたモジュールであるため、明らかにまだインポートされていません。
次のことを試すと:
let name: any = 'ChatPopupComponent';
let dialogRef = this.dialog.open(name
data: {}
});
次のエラーが表示されます-error loading module Error: No component factory found for EmailPopUpComponent. Did you add it to @NgModule.entryComponents?
コンポーネントを表示する唯一の方法は、モジュールを 内にインポートすることだと思われますが、モジュールapp.module.ts
を遅延ロードするという目標には反しています。
上記を行う方法はありますか、それともモジュールとコンポーネントの遅延読み込みに関する基本的なことを見逃していますか?