Ionic 3: фабрика компонентов не найдена, вы добавили ее в @ NgModule.entryComponents? - PullRequest
0 голосов
/ 24 июня 2019

Я создал библиотеку 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 голосов
/ 24 июня 2019

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 {}
0 голосов
/ 24 июня 2019

если вы используете отложенную загрузку и компоненты, вы должны импортировать ваши компоненты в app.module.ts, а также импортировать страницы, которые используют эти компоненты поэтому вы должны удалить страницы из других объявлений и импортировать их в app.module.ts

...