3 回答

TA貢獻(xiàn)1802條經(jīng)驗 獲得超4個贊
如果您遇到此問題,我假設(shè)您使用的是 Angular v8 或更低版本。使用 Ivy,您不再需要將動態(tài)呈現(xiàn)的組件添加到entryComponents
. 一種選擇是升級您的角度版本。
為什么我們需要添加一個動態(tài)創(chuàng)建的組件entryComponents
?
在創(chuàng)建組件時,Angular 需要ComponentFactory
解析它們。當(dāng)您在模板中使用組件時,angular 會為這些組件創(chuàng)建工廠。但是,動態(tài)呈現(xiàn)的組件不會在任何模板中使用。這就是為什么您需要告訴 Angular 通過將這些組件添加到entryComponents
(使用 Ivy-aka Angular v9+,情況不再如此)來為這些組件創(chuàng)建一個工廠。讓我們看看你的情況。
你有一個延遲加載的模塊EMoneyDepositModule
,你添加SendMessageComponent
到entryComponents
. 這樣做是為SendMessageComponent
注入樹的子部分創(chuàng)建一個工廠。它僅適用于EMoneyDepositModule
. 此模塊之外的任何人都不能注入該工廠。我假設(shè)matDialog
是全球提供的,您可以在任何地方訪問它。但是,matDialog
無法訪問延遲加載模塊的工廠。
我已經(jīng)能夠重現(xiàn)你的問題。在這里檢查
所以您可以執(zhí)行以下操作之一
添加
SendMessageComponent
到提供entryComponents
的模塊中matDialog
。以某種方式在您的延遲加載模塊中提供一個
matDialog
。我假設(shè)您通過簡單地導(dǎo)入來實現(xiàn)這一點MatDialogModule
在EMoneyDepositModule
上面的示例中,只需取消MatDialogModule
注釋lazy.module

TA貢獻(xiàn)1845條經(jīng)驗 獲得超8個贊
我在 Angular 12.1 版本中遇到了同樣的問題,“沒有找到組件工廠”。我原以為 IVY 是隨 Angular 12.1 自動安裝的,但事實并非如此。解決方案,我更新了我的編譯器以使用 IVY,并且一切都按預(yù)期工作。有關(guān)如何升入IVY 的詳細(xì)信息,請參閱此網(wǎng)站

TA貢獻(xiàn)1836條經(jīng)驗 獲得超5個贊
我看到可能的原因:
新組件
正如 @Random 在評論中提到的那樣,新添加的組件可能無法被正確使用ng serve
。
另一個 SendMessageComponent
SendMessageComponent
您可能在 ts-import 語句中引用了另一個。
循環(huán)引用
延遲加載的模塊很容易出現(xiàn)這種行為。請檢查您的SendMessageComponent
和其他相關(guān)組件。SendMessageComponent
絕對不應(yīng)從同一模塊導(dǎo)入任何其他元素。請將可能的發(fā)現(xiàn)更改為相對導(dǎo)入。
添加回答
舉報