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绝对不应从同一模块导入任何其他元素。请将可能的发现更改为相对导入。
添加回答
举报
