角延迟加载模块和entryComponents错误

时间:2019-11-01 10:12:56

标签: javascript angular typescript angular7 lazy-loading

我懒于加载angular模块,并尝试打开DatesModal时遇到此错误:

No component factory found for DatesModal. Did you add it to @NgModule.entryComponents?

我的lazyModule如下:

declarations: [DatesModal] entryComponents: [DatesModal]

我肯定是在lazyModule的entryComponents数组中添加了DatesModal。有人知道我在这里可能会错过什么吗?

如果您需要更多信息来回答这个问题,请告诉我。

2 个答案:

答案 0 :(得分:0)

您似乎想在其他模块中获取/导入此模块,但是此模块对其他人不可见。尝试导出模块:

exports: [DatesModal]

更新:

As Angular docs says:

  

对于生产应用程序,您希望加载最小的代码。的   代码应仅包含您实际需要的类,   排除从未使用过的组件。因此,Angular   编译器仅生成可从以下位置访问的组件的代码   entryComponents;这意味着添加更多引用到   @ NgModule.declarations并不意味着它们一定是   包含在最终捆绑包中。   如果某个组件不是输入组件,并且在模板中找不到,   摇树机将其丢弃。因此,最好仅添加   真正是入门组件的组件,可帮助您保持应用程序的状态   尽可能修剪。

要使您的模块被lzay加载,您需要在以下路线中进行操作:

const routes: Routes = [
  {
    path: 'customers',
    loadChildren: () => import('./customers/customers.module').then(mod => mod.CustomersModule)
  },
  {
    path: 'orders',
    loadChildren: () => import('./orders/orders.module').then(mod => mod.OrdersModule)
  },
  {
    path: '',
    redirectTo: '',
    pathMatch: 'full'
  }
];

Read this docs about how to make your modules to be lazy loaded.

答案 1 :(得分:0)

您是否曾经使用任何第三方库(或您自己)在延迟加载模块中动态创建此组件?

如果是这样,则需要将此组件添加到AppModule的(或上级非延迟加载模块)entrycomponents中。

更详细的信息,您可以看到此issue