我创建了一个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
是模态的,以防万一。另外,只有在使用延迟加载时才会发生这种情况。
谢谢。
答案 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
仅适用于pipe
,component
或directive
。您应该仅将ComponentModule
添加到要使用它的模块的导入部分。这样做,模块的所有导出组件都将在TestPageModule
中可用:
@NgModule({
declarations: [
TestPage
],
imports: [
IonicPageModule.forChild(TestPage),
ComponentModule
],
})
export class TestPageModule {}