Угловой диалог: не найдена фабрика компонентов для DialogModule. - PullRequest
0 голосов
/ 12 июня 2018

Попытка создать диалоговое окно, используя модель объектов в angular 6. Но я получаю эту ошибку:

Не найдена фабрика компонентов для DialogModule.Вы добавили его в @ NgModule.entryComponents?

Все говорят, что используют

entryComponents: [DialogComponent]

, которым я являюсьуже делаю.Также попытался использовать это в функциональном модуле без успеха.Вот мне кажется необходимые и упрощенные файлы:

app.module.ts

import { DialogModule } from './components/dialog/dialog.module';
import { DialogComponent } from './components/dialog/dialog.component';
...

// AoT requires an exported function for factories
export function HttpLoaderFactory(http: HttpClient) {
  return new TranslateHttpLoader(http);
}

@NgModule({
  declarations: [..., AppComponent],
  imports: [DialogModule],
  entryComponents: [DialogComponent],

  providers: [..., MatDialogModule],
  bootstrap: [AppComponent]
})
export class AppModule {}

dialog.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

import { DialogComponent } from './dialog.component';
...

@NgModule({
  imports: [
    CommonModule
  ],
  declarations: [..., DialogComponent],
  exports: [DialogComponent]
})
export class DialogModule {
  ...
}

some-other.component.ts

import { DialogModule } from '../../components/dialog/dialog.module';
...

@Component({
    ...
})

export class LanguageButtonComponent implements OnInit {

  constructor(private languageService : LanguageService,
    private dialog: MatDialog,) {
  }

  // activated from button
  openDialog() {
    this.dialog.open(DialogModule);
  }
}

Как избавиться от ошибки?

Ответы [ 4 ]

0 голосов
/ 08 апреля 2019

Если модуль, в котором вы используете компонент, является модулем с отложенной загрузкой, вам необходимо импортировать MatDialogModule в тот же модуль , иначе вы получите ту же ошибкудаже если вы добавляете свой компонент в entryComponents или, возможно, вы можете создать общий модуль для компонентов материала и импортировать общий модуль во все другие необходимые модули.

0 голосов
/ 12 июня 2018

Оказалось, я не могу правильно прочитать сообщение об ошибке.Исправлено было изменить

this.dialog.open(DialogModule);

на

this.dialog.open(DialogComponent);

Еще одно напоминание, что если вы не можете найти решение простой проблемы с помощью поиска в Интернете, это, скорее всего, опечатка.

0 голосов
/ 12 июня 2018

Вы должны поместить DialogComponent в entryComponents из DialogModule, а не в AppModule:

  1. Поместите entryComponents в правильный модуль

`` `javascript

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

import { DialogComponent } from './dialog.component';
...

@NgModule({
  imports: [
    CommonModule
  ],
  declarations: [DialogComponent],
  exports: [DialogComponent],
  entryComponents: [DialogComponent],
})
export class DialogModule {
    ...
}

` ``

Удалить entryComponents из AppModule
0 голосов
/ 12 июня 2018

Удалить MatDialogModule у провайдеров

providers: [...],
...