13

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を遅延ロードするという目標には反しています。

上記を行う方法はありますか、それともモジュールとコンポーネントの遅延読み込みに関する基本的なことを見逃していますか?

4

3 に答える 3