离子3:找不到组件工厂,您是否将其添加到@ NgModule.entryComponents?

时间:2019-06-24 09:21:23

标签: angular ionic-framework ionic3 node-modules

我创建了一个Angular库,其中包含一些组件和一个用于导出所有组件的模块。该库的模块如下:

import { NgModule, ModuleWithProviders } from '@angular/core';
import { FirstComponent } from './first';
import { IonicModule } from 'ionic-angular';
import { ProviderTest } from '../../providers/test/test'
import { SecondComponent } from '../second/second';
import { ThirdComponent } from '../third/third';

@NgModule({
    imports: [
        IonicModule
    ],
    declarations: [
        FirstComponent,
        SecondComponent,
        ThirdComponent
    ],
    exports: [
        FirstComponent,
        SecondComponent,
        ThirdComponent
    ],
    entryComponents: [
        FirstComponent,
        SecondComponent,
        ThirdComponent
    ]
})
export class ComponentModule {
    static forRoot(): ModuleWithProviders {
        return {
            ngModule: ComponentModule,
            providers: [ProviderTest]
        };
    }
}

我的问题是,当我尝试在项目中使用该库时,会得到:

Error: Uncaught (in promise): Error: No component factory found for SecondComponent. Did you add it to @NgModule.entryComponents?

我看到了相关的问题,他们说要将ComponentModule添加到我要使用该库的模块的声明中,但是如果这样做,则会出现此错误:

Error: Uncaught (in promise): Error: Unexpected module 'ComponentModule' declared by the module 'TestPageModule'. Please add a @Pipe/@Directive/@Component annotation.

我的TestPageModule的模块现在是这样的:

@NgModule({
  declarations: [
    TestPage,
    ComponentModule
  ],
  imports: [
    IonicPageModule.forChild(TestPage),
    ComponentModule
  ],
})
export class TestPageModule {}

有人知道问题出在哪里吗? SecondComponent是模态的,以防万一。另外,只有在使用延迟加载时才会发生这种情况。

谢谢。

2 个答案:

答案 0 :(得分:0)

如果您使用的是延迟加载和组件,则应将组件导入app.module.ts,还应导入使用该组件的页面 因此您应该从其他声明中删除页面并将其导入app.module.ts

答案 1 :(得分:0)

Error: Uncaught (in promise): Error: Unexpected module 'ComponentModule' declared by the module 'TestPageModule'. Please add a @Pipe/@Directive/@Component annotation.

declarations仅适用于pipecomponentdirective。您应该仅将ComponentModule添加到要使用它的模块的导入部分。这样做,模块的所有导出组件都将在TestPageModule中可用:

@NgModule({
  declarations: [
    TestPage
  ],
  imports: [
    IonicPageModule.forChild(TestPage),
    ComponentModule
  ],
})
export class TestPageModule {}