Angular 6: no component factory found,did you add it to @NgModule.entryComponents?

1.问题来源

  • 编写ngx-admin时使用自定义modal component时报错,模态框无法弹出

2.问题解决思路

  • 看到提示,果断就在entryComponents中引入了定义的modal
  • 然而还是报错…
  • 又import了ModalModule,解决了这个问题

3.调查原因

  • 使用loadChild模式加载对应路由下的组件时,是懒加载模式,即需要的时候才会加载,所以如果路由走的是懒加载模式,需要的module即使在app.module中引入过了,依旧需要再引入一次
  • 参考文章:https://medium.com/@cyrilletuzi/understanding-angular-modules-ngmodule-and-their-scopes-81e4ed6f7407

4.补充知识点

  • NgModule的主要属性如下:
    • declarations:模块内部Components/Directives/Pipes的列表,声明一下这个模块内部成员
    • providers:指定应用程序的根级别需要使用的service。(Angular2中没有模块级别的service,所有在NgModule中声明的Provider都是注册在根级别的Dependency Injector中)
    • imports:导入其他module,其它module暴露的出的Components、Directives、Pipes等可以在本module的组件中被使用。比如导入CommonModule后就可以使用NgIf、NgFor等指令。
    • exports:用来控制将哪些内部成员暴露给外部使用。导入一个module并不意味着会自动导入这个module内部导入的module所暴露出的公共成员。除非导入的这个module把它内部导入的module写到exports中。
    • bootstrap:通常是app启动的根组件,一般只有一个component。bootstrap中的组件会自动被放入到entryComponents中。
    • entryCompoenents: 不会再模板中被引用到的组件。这个属性一般情况下只有ng自己使用,一般是bootstrap组件或者路由组件,ng会自动把bootstrap、路由组件放入其中。 除非不通过路由动态将component加入到dom中,否则不会用到这个属性。

你可能感兴趣的:(Angular相关,Angular,ModalModule,loadChild)