组件不能用作入口组件

时间:2018-06-12 13:07:47

标签: webpack angular5 ng-modules

import { SpinnerComponent, ExternalLibrary } from 'external.library'
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule, ExternalLibrary
  ],
  bootstrap: [AppComponent]
  , entryComponents: [SpinnerComponent]
})

上面是我的代码,用于指定模块的entryComponent。 此SpinnerComponent也来自外部模块,即ExternalModule。

Webpack给出错误:

  

SpinnerComponent中的错误不能用作条目组件。

属于同一模块是否要求组件出现在entryComponents属性列表中?

根据官方定义,在出现在entryComponent属性中之前,没有为组件指定此类先决条件。

4 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。对我来说,解决此问题的方法是将组件添加到外部库中模块的entryComponents中。

在您的情况下,这意味着更新ExternalLibrary NgModule,使其包含SpinnerComponent作为输入组件,而不是使用库的应用程序。

@NgModule({
    ...
    entryComponents: [SpinnerComponent]
    ...
})
export class ExternalLibrary { }

答案 1 :(得分:0)

就我而言,即使将错误添加到库模块内的entryComponents后,错误仍然存​​在。原来是由于我的index.ts文件所致:在模块文件夹中,我有一个index.ts文件,该文件正在重新导出模块及其组件。在public_api.ts内部,我使用了index.ts的导出,因此看起来像这样:

...
export * from './lib/shell';

以某种方式Angular不喜欢库中的index.ts文件,但我得到了错误(语言服务也抛出错误,无法识别标签)。将index.ts更改为public-api.ts可以解决此问题:

...
export * from './lib/shell/public-api';

答案 2 :(得分:0)

您在声明中缺少动态组件

import { SpinnerComponent, ExternalLibrary } from 'external.library'
@NgModule({
  declarations: [
    AppComponent, SpinnerComponent
  ],
  imports: [
    BrowserModule, ExternalLibrary
  ],
  bootstrap: [AppComponent]
  , entryComponents: [SpinnerComponent]
})

希望有帮助

答案 3 :(得分:0)

在我的情况下,问题是入口组件在Angular库中声明,但是在不同的花边加载模块中再次声明(再次作为入口组件),清理了花边加载模块中的声明,仅保留了库中的声明有效。

希望有帮助。