StaticInjectorError(AppModule)[MatDialogTitle -> MatDialogRef]
Я знаком с этой ошибкой, но я начал видеть ее только после обновления до Angular Material 6.4.7.
Все мои модули ссылаются на мой собственный MaterialModule, который экспортирует MatDialogModule. У меня нет никаких настроек провайдера для MatDialogRef - нет необходимости раньше.
И как обстоят дела с [MatDialogTitle -> MatDialogRef]? Что это значит?
Кажется, что все работает нормально в сборках dev и prod. Я не могу понять, что является причиной этого.
Есть ли способ отследить это до чего-то??
Спасибо
core.js:1673 ERROR Error: Uncaught (in promise): Error: StaticInjectorError(AppModule)[MatDialogTitle -> MatDialogRef]:
StaticInjectorError(Platform: core)[MatDialogTitle -> MatDialogRef]:
NullInjectorError: No provider for MatDialogRef!
Error: StaticInjectorError(AppModule)[MatDialogTitle -> MatDialogRef]:
StaticInjectorError(Platform: core)[MatDialogTitle -> MatDialogRef]:
NullInjectorError: No provider for MatDialogRef!
at NullInjector.push../node_modules/@angular/core/fesm5/core.js.NullInjector.get (core.js:1062)
at resolveToken (core.js:1300)
at tryResolveToken (core.js:1244)
at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:1141)
at resolveToken (core.js:1300)
at tryResolveToken (core.js:1244)
at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:1141)
at resolveNgModuleDep (core.js:8369)
at NgModuleRef_.push../node_modules/@angular/core/fesm5/core.js.NgModuleRef_.get (core.js:9057)
at resolveDep (core.js:9422)
at NullInjector.push../node_modules/@angular/core/fesm5/core.js.NullInjector.get (core.js:1062)
at resolveToken (core.js:1300)
at tryResolveToken (core.js:1244)
at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:1141)
at resolveToken (core.js:1300)
at tryResolveToken (core.js:1244)
at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:1141)
at resolveNgModuleDep (core.js:8369)
at NgModuleRef_.push../node_modules/@angular/core/fesm5/core.js.NgModuleRef_.get (core.js:9057)
at resolveDep (core.js:9422)
at resolvePromise (zone.js:814)
at resolvePromise (zone.js:771)
at zone.js:873
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421)
at Object.onInvokeTask (core.js:3811)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188)
at drainMicroTaskQueue (zone.js:595)
at ZoneTask.push../node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask [as invoke] (zone.js:500)
at invokeTask (zone.js:1540)
1 ответ
Обновление: так что для моей проблемы, я смог решить ее с помощью провайдеров из этой ошибки [ https://github.com/angular/material2/issues/8419]. Я добавил следующие 2 строки в свой список поставщиков app.module:
, { provide: MatDialogRef, useValue: {} }
, { provide: MAT_DIALOG_DATA, useValue: [] }
Ошибка относится к проблемам с тестированием, но у меня был один работающий MatDialog, но другой выкинул бы ошибку.
Надеюсь, это поможет
Да, вы должны написать в entryComponents в вашем @NgModule, как показано ниже
entryComponents: [DialogComponent, GetDialogContent],
У вас возникла эта проблема, потому что вы добавили ссылку на свой диалог в свой HTML-макет. Удалите эту ссылку и убедитесь, что вы добавили свой диалог в свойстве entryComponents в модуле, используя его. Смотрите документацию по угловым материалам здесь. Объявление вашего модуля должно выглядеть следующим образом.
@NgModule({
imports: [
// ...
MatDialogModule
],
declarations: [
AppComponent,
ExampleDialogComponent
],
entryComponents: [
ExampleDialogComponent // THE MAGIC HAPPENDS HERE
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}
В вашем МАТЕРИАЛ.MODULE.TS
import {MatDialogRef} from '@angular/material';
@NgModule({
providers: [MatDialogRef]
})