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 { }
