3 回答
TA贡献1802条经验 获得超4个赞
如果您遇到此问题,我假设您使用的是 Angular v8 或更低版本。使用 Ivy,您不再需要将动态呈现的组件添加到entryComponents
. 一种选择是升级您的角度版本。
为什么我们需要添加一个动态创建的组件entryComponents
?
在创建组件时,Angular 需要ComponentFactory
解析它们。当您在模板中使用组件时,angular 会为这些组件创建工厂。但是,动态呈现的组件不会在任何模板中使用。这就是为什么您需要告诉 Angular 通过将这些组件添加到entryComponents
(使用 Ivy-aka Angular v9+,情况不再如此)来为这些组件创建一个工厂。让我们看看你的情况。
你有一个延迟加载的模块EMoneyDepositModule
,你添加SendMessageComponent
到entryComponents
. 这样做是为SendMessageComponent
注入树的子部分创建一个工厂。它仅适用于EMoneyDepositModule
. 此模块之外的任何人都不能注入该工厂。我假设matDialog
是全球提供的,您可以在任何地方访问它。但是,matDialog
无法访问延迟加载模块的工厂。
我已经能够重现你的问题。在这里检查
所以您可以执行以下操作之一
添加
SendMessageComponent
到提供entryComponents
的模块中matDialog
。以某种方式在您的延迟加载模块中提供一个
matDialog
。我假设您通过简单地导入来实现这一点MatDialogModule
在EMoneyDepositModule
上面的示例中,只需取消MatDialogModule
注释lazy.module
TA贡献1845条经验 获得超8个赞
我在 Angular 12.1 版本中遇到了同样的问题,“没有找到组件工厂”。我原以为 IVY 是随 Angular 12.1 自动安装的,但事实并非如此。解决方案,我更新了我的编译器以使用 IVY,并且一切都按预期工作。有关如何升入IVY 的详细信息,请参阅此网站
TA贡献1836条经验 获得超5个赞
我看到可能的原因:
新组件
正如 @Random 在评论中提到的那样,新添加的组件可能无法被正确使用ng serve
。
另一个 SendMessageComponent
SendMessageComponent
您可能在 ts-import 语句中引用了另一个。
循环引用
延迟加载的模块很容易出现这种行为。请检查您的SendMessageComponent
和其他相关组件。SendMessageComponent
绝对不应从同一模块导入任何其他元素。请将可能的发现更改为相对导入。
添加回答
举报