angular / angular/components

bug(MatDialog): Tokens from lazy module are not available in another module's popup component

Offen
#22,021 3 Kommentare 5 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
area: material/dialog P3
Vorherrschende Sprache
TypeScript
Sterne
25k
Forks
6.8k
Ø Merge
1 T. 8 Std.
Gemergte PRs (30 T.)
91

Beschreibung

#### Reproduction

https://stackblitz.com/edit/angular-material-dialog-token-from-lazy-module?file=src%2Fapp%2F%2Bteacher%2Fcomponents%2Fteacher-page%2Fteacher-page.ts

Steps to reproduce:
1. go to /teacher route
2. click open popup
3. see an exception on `ContentComponents` token access inside `HomeworkPopupComponent`

#### Expected Behavior

`MatDialog` uses passed ViewContainerRef`s injector as a parent for popup component, so it's expected to have all tokens from such injector available inside popup
https://github.com/angular/components/blob/c34511eec93461596a7febd95fa6a85f6949cdac/src/material/dialog/dialog.ts#L298

#### Actual Behavior

```
ERROR
Error: R3InjectorError(AppModule)[InjectionToken ContentComponents -> InjectionToken ContentComponents -> InjectionToken ContentComponents]:
NullInjectorError: No provider for InjectionToken ContentComponents!
```

`ContentComponents` token is available from TeacherPageComponent's `viewContainerRef.injector`.
Also it's available from `@SkipSelf() private injector: Injector` inside HomeworkPopupComponent. But we can't use this hack because we need this token deep in HomeworkPopupComponent's children.

#### Environment

- Angular: 11.2.3
- CDK/Material: 11.2.2
- Browser(s): Chrome Version 88.0.4324.182
- Operating System (e.g. Windows, macOS, Ubuntu): Windows 10

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Führe die verlinkte StackBlitz-Reproduktion aus und untersuche src/app/+teacher/components/teacher-page/teacher-page.ts, HomeworkPopupComponent und den MatDialog-Einstiegspunkt, der rund um Zeile 298 in dialog.ts verlinkt ist. Verfolge den ViewContainerRef-Injektor durch das Popup und seine untergeordneten Komponenten; als erledigt gilt, wenn ContentComponents ohne die Ausnahme verfügbar ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
angular, typescript
Bereich
frontend
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.