typescript - Angular Material: 'mat-dialog-content' är inte ett känt element


Innan du markerar denna fråga som "duplicerad", vänligen hör mig eftersom jag har fastnat i timmar med detta problem. Jag har gått igenom de befintliga frågorna men kunde inte hitta någon lösning.

Jag lär mig Angular och har börjat med Angular 9+ och Angular Material. Jag försöker implementera en enkel dialog från Angular Material genom att läsa dokumentationen från den officiella sidan.

Min kod följer exempel-koden noggrant men jag förstår inte varför jag fortfarande får dessa felmeddelanden:

'mat-dialog-content' is not a known element.
'mat-dialog-actions' is not a known element.

Dialogrutan visas, men det ser ut som om inga Angular Material-komponenter eller direktiv renderas alls i dialogens mall-html. Även om jag använder <button mat-button>Knapp</button>, skulle det renderas som en vanlig knapp och inte som en Angular Material-knapp. Allt annat som inte är i dialogens mall fungerar perfekt. Jag har ingen aning om vad jag gör fel här, men om någon kunde påpeka mitt misstag skulle det vara fantastiskt!

app.module.ts: (Jag importerar MatDialogModule)

...
import { MatDialogModule } from '@angular/material/dialog';

@NgModule({
    declarations: [
        ...
    ],
    imports: [
        ...
        MatDialogModule
    ],
    providers: [],
    bootstrap: [AppComponent]
})
export class AppModule { }

mycomponent.ts:

import { Component, OnInit, ViewChild, Inject } from '@angular/core';
import { MatDialog, MatDialogModule, MAT_DIALOG_DATA, MatDialogConfig } from '@angular/material/dialog';
...

@Component({
  selector: 'app-my',
  templateUrl: './my.component.html',
  styleUrls: ['./my.component.css']
})
export class MyComponent implements OnInit {

    constructor(public dataDialogHandler: MatDialog) {}

    ngOnInit(): void {}

    public openDataDialog(): void {

        const dialogConfig = new MatDialogConfig();

        dialogConfig.data = {};

        this.dataDialogHandler.open(DataDialogComponent, dialogConfig);
    }
}

@Component({
    selector: 'data-dialog',
    templateUrl: './data-dialog.html'
})
export class DataDialogComponent {

    constructor(@Inject(MAT_DIALOG_DATA) public data: DialogData) {}
}

export interface DialogData {}

data-dialog.html:

<h2 mat-dialog-title>some title</h2>
<mat-dialog-content>
    <p>dialog works</p>
</mat-dialog-content>
<mat-dialog-actions align="end">
    <button mat-button mat-dialog-close>Close</button>
</mat-dialog-actions>

och slutligen, i my.component.html:

<button mat-button (click)="openDataDialog()">View Dialog</button>

Vad gör jag fel här? Tack på förhand!

@angular/core 9.0.7
@angular/cdk 9.1.3
@angular/material 9.1.3
typescript 3.7.5

Svar #1

Ändra mat-dialog-content och mat-dialog-actions till attribut. t.ex:

<div mat-dialog-content>
    <p>dialog works</p>
</div>
<div mat-dialog-actions align="end">
    <button mat-button mat-dialog-close>Close</button>
</div>

Svar #2

Lägg till DataDialogComponent i declarations-arrayen och i entryComponents-arrayen i app.module.ts

import { MatDialogModule } from '@angular/material/dialog';

@NgModule({
    declarations: [
       DataDialogComponent //I think you have missed this declaration
    ],
    imports: [
        ...
        MatDialogModule
    ],
    providers: [],
   entryComponents: [DataDialogComponent]
    bootstrap: [AppComponent]
})
export class AppModule { }

Relaterade artiklar