我希望能够以模式或页面形式显示表单。我在页面上的表单非常简单,因为页面和表单都存在于同一模块中。但是,对于模态形式的表单,情况有所不同。
我想创建一个通用服务,我可以调用该服务并将其传递给组件,以使该组件以模式显示。所以我的服务有这样的方法:
showForm(component: any, options?:NgbModalOptions){
const modal = this.ngbModal.open(content, {
backdrop: 'static',
size: 'lg',
...options
});
...
}
此模式服务将位于我的SharedModule中,该SharedModule是在appmodule级别导入的。然后,我有一个延迟加载的安全模块。在安全模块中,我有一个PracticeFormComponent,它是我想在模式中显示的表单。我在SecureModule的声明,导出和entryComponents中具有PracticeFormComponent。
当我尝试从也在SecureModule中声明的页面调用modalService.showForm(PracticeFormComponent)时,出现错误消息,提示未找到组件工厂。我不确定我在这里缺少什么。
如果有人可以帮助我,还有第二个问题,即使它是惰性加载的子级或SecureModule的同级组件,也可以调用FormComponent从另一个模块加载吗?
答案 0 :(得分:0)
然后我有一个延迟加载的安全模块。在安全模块中,我有一个PracticeFormComponent,它是我想在模式中显示的表单。
在加载惰性模块之前,PracticeFormComponent
组件工厂不存在。
当我尝试从也在SecureModule中声明的页面调用modalService.showForm(PracticeFormComponent)
您正在使用组件类(构造函数)而不是组件工厂。 WebPack允许您直接从TypeScript文件导入此功能。因此不会有任何编译时错误,但是在运行时,模态服务将尝试从此引用中发现组件工厂,并且将使用用于创建该服务器的依赖项注入器。
您需要更改showForm()
函数,以便它需要一个组件工厂而不是any
,然后使用它来创建模态。
这将帮助您解决模块相关的依赖性问题,因为除非DI中存在工厂,否则您将无法获得工厂。
您可以从惰性模块内部创建模态,但不能从其外部创建模态。如果您需要在惰性模块之外执行此操作,那么该模式组件并不是真正的惰性。这是一个共享的组件。