想請教Kevin大大關於NgModuleFactory的問題

在範例裡面 Component01 和 Component02 都是由 ComponentFactory動態產生的
我把另外兩個 Component (03和04) 放到BasicModule裡面
想要使用ModuleFactory來動態載入module
目的是希望可以達到動態產生component的同時又有lazzy loading 的效果

想請教的是在範例網頁的錯誤是:
Error: Cannot find ‘BasicModule’ in ‘./basic.module’
(我寫的路徑應該沒有錯但是卻找不到??)

可是我在本機自己寫的範例卻是別的錯誤:
Error: No component factory found for Dy3Component. Did you add it to @NgModule.entryComponents?
(在basic.module我有把component放進entryComponents,卻還是一直報錯)

範例網址:https://stackblitz.com/edit/angular-multiple-component

你這個問題,跟你的寫法有關係
簡單的說, ComponentFactory 隸屬的 NgModule 是不同的,所以才會出現 No component factory found for Dy3Component. Did you add it to @NgModule.entryComponents?

如果在 stackblitz 上測試時,在 app.component.ts module.load 的路徑要修改成 src/app/basic.module#BasicModule 才會正確

這裡有我修正後的版本

你參考看看

1個讚

原來如此…難怪怎麼改路徑都是錯的 冏

那想請教一下,原本我的寫法是把NgModuleFactoryt的Component直接加到tab-detail中,
現在多了 componentFactory = this.moduleFactory.create(this.injector)
這是因為basic.module是後來才載入的,所以要先注入到NgModuleFactory之後才有辦法顯示component
是這樣的概念嗎?

另外想請教一下,假設BasicModule有10個Component那我要怎麼選擇載入的是哪個component?
只能在module裡面寫好static嗎?
module

要動態產生 Component ,要確保所使用的 ComponentFactory 是來自所Component 所註冊的 NgModule

你原本的寫法是,要 AppModule 去產生 Dy3Component.

這個問題,直接發在討論區上,會讓更多人受惠 :grinning:

1個讚

另外想請教一下,假設BasicModule有10個Component那我要怎麼選擇載入的是哪個component?
只能在module裡面寫好static嗎?

來自問自答一下,可以用物件的方式來建立

basic.module.ts
module

app.component.ts