Не найдена фабрика компонентов для неопределенных. но добавил в @ NgModule.entryComponents с SharedModule - PullRequest
0 голосов
/ 07 ноября 2018

Итак, я нашел десятки статей, объясняющих эту проблему, и в большинстве предложений говорится о добавлении моего компонента в массив entryComponents в @NgModule, но я озадачен тем, где или какие записи entryComponents во многих моих модулях .. так что в основном мои зависимости модуля выглядят так:

AppModule
 - EnvironmentModule
 - ContainerModule
 - SharedModule

EnvironmentModule
 - ContainerModule
 - EnvironmentListItemDetailComponent
    private _dialogRef: MatDialogRef<ConfirmDialogComponent>;

ContainerModule
 - MatDialogModule, 
 - ConfirmDialogComponent (this is the component that I want to move)
 - ContainerListItemDetailComponent
     private _dialogRef: MatDialogRef<ConfirmDialogComponent>;

По сути, я хочу переместить ConfirmDialogComponent из вложенного дочернего модуля в общий модуль, от которого могут зависеть модули Environment и Container. (Я также хотел бы переместить ContainerModule из-под EnvironmentModule, но это на другой день)

Итак, я хочу переместить ConfirmDialogComponent в SharedModule и получить все, что нужно, как выглядит @NgModule для App, Environment, Container, Shared? Я действительно запутался .. так вот что у меня так далеко:

shared.module.ts:

@NgModule({
  imports: [
    CommonModule,
    MatDialogModule,
    BrowserAnimationsModule
  ],
  declarations: [
    ConfirmDialogComponent
  ],
  exports: [
    ConfirmDialogComponent
  ],
  entryComponents: [
    ConfirmDialogComponent
  ]
})
export class SharedModule { }

environment.module.ts:

@NgModule({
  imports: [
    HttpClientModule,
    CommonModule,
    FormsModule,
    EnvironmentRoutingModule,
    ContainerModule
  ],
  declarations: [
    EnvironmentListComponent,
    EnvironmentListEnvironmentsComponent,
    EnvironmentListItemDetailComponent,
    EnvironmentListItemComponent
  ],
  providers: [... ]
})

container.module.ts:

@NgModule({
  imports: [
    FormsModule,
    CommonModule,
    BrowserAnimationsModule,
    MatDialogModule,
    ContainerRoutingModule
  ],
  declarations: [
    KeysPipe,
    ContainerListComponent,
    ContainerListItemComponent,
    ContainerListItemDetailComponent,
    ParameterListComponent,
    ParameterListItemComponent,
    ParameterTypeInfoComponent,
    ConfirmDialogComponent
  ],
  exports: [
    ContainerListComponent
  ],
  providers: [...],
  entryComponents: [ ConfirmDialogComponent ]
})

app.module.ts:

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    FormsModule,
    BrowserModule,
    AppRoutingModule,
    HttpModule,
    ContainerModule,
    EnvironmentModule,
    LoginModule,
    SharedModule,
    PageNotFoundModule /* DO NOT MOVE THIS - as a result of routing peculiarities the order of child routes matter for handling wildcard ** https://stackoverflow.com/questions/40015385/angular-2-router-wildcard-handling-with-child-routes */
  ],
  providers: [
    AppConfigService,
    AuthGuardService,
    BootstrapService,
    EventBrokerService,
    HttpClientService,
    TruIdTokenService,
    StartupService,
    {
      provide: APP_INITIALIZER,
      useFactory: initConfiguration,
      deps: [StartupService],
      multi: true
    }
  ],
  bootstrap: [AppComponent]
})

Так что я не знаю: \ это немного беспорядок, и я даже не уверен, что все мои зависимости организованы правильно.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Так что, думаю, мне нужно было:

  1. Удалить все записи entryComponents
  2. Удалить объявление ConfirmDialogComponent из всех модулей, кроме SharedModule.
  3. Импорт SharedModule в модули везде, где использовался ConfirmDialogComponent.
  4. Добавить entryComponents: [ ConfirmDialogComponent ] к SharedModule
  5. Измените import { ConfirmDialogComponent } в любом дочернем компоненте, чтобы использовать новое расположение общего компонента
0 голосов
/ 07 ноября 2018
  1. Удалить все записи entryComponents
  2. Удалить объявление ConfirmDialogComponent из всех модулей, кроме SharedModule.
  3. Импорт SharedModule в модули, где бы ни использовался ConfirmDialogComponent.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...