I am using material 2 version 2.0.0-beta.12. I need to adjust the position of the material Modal. I followed this answer to do that. https://stackoverflow.com/a/44238699/8253445 Since MdDialog
is not available now I used {MatDialog, MatDialogRef, MAT_DIALOG_DATA}
.
constructor(public dialog: MatDialog,public dialModRef:MatDialogRef<any>) {}
When I add MatDialogRef to my constructor it gives me the error:
No provider for MatDialogRef
import {Component, Inject} from '@angular/core';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from
'@angular/material';
@Component({
selector: 'dialog-overview-example',
templateUrl: 'dialog-overview-example.html'
})
export class DialogOverviewExample {
animal: string;
name: string;
constructor(public dialog: MatDialog,public
dialModRef:MatDialogRef<any>) {}
openDialog(): void {
let dialogRef = this.dialog.open(DialogOverviewExampleDialog, {
width: '500px',
data: { name: this.name, animal: this.animal }
});
dialogRef.afterClosed().subscribe(result => {
console.log('The dialog was closed');
this.animal = result;
});
}
}
@Component({
selector: 'dialog-overview-example-dialog',
templateUrl: 'dialog-overview-example-dialog.html',
})
export class DialogOverviewExampleDialog {
constructor(
public dialogRef: MatDialogRef<DialogOverviewExampleDialog>,
@Inject(MAT_DIALOG_DATA) public data: any) { }
onNoClick(): void {
this.dialogRef.close();
}
}
entryComponents: [DialogOverviewExample,DialogOverviewExampleDialog]
<h1 md-dialog-title>Hi {{data.name}}</h1>
<div md-dialog-content>
<p>What's your favorite animal?</p>
<md-form-field>
<input mdInput tabindex="1" [(ngModel)]="data.animal">
</md-form-field>
</div>
<div md-dialog-actions>
<button md-button tabindex="2">Ok</button>
<button md-button (click)="onNoClick()" tabindex="-1">No Thanks</button>
</div>
You will get that exact
No provider for
MatDialogRef
error in case you include your dialog's component html selector in dialog-overview-example.html
like <dialog-overview-example-dialog></dialog-overview-example-dialog>
There is no need for that, do not include the html selector of the dialog component anywhere.
You need to import this module in your module file (app.module.ts
by default):
import { MatDialogModule } from '@angular/material';
and add MatDialogModule
to imports
in your module declaration:
@NgModule({
declarations: [...],
imports: [
...
MatDialogModule,
...
],
providers: [...],
entryComponents: [...],
bootstrap: [...]
})
EDIT:
You need to pass data through this.dialogRef.close();
to get result
in subscribe
working. For example:
@Component({
selector: 'dialog-overview-example-dialog',
templateUrl: 'dialog-overview-example-dialog.html',
})
export class DialogOverviewExampleDialog {
someValue: boolean = false;
constructor(
public dialogRef: MatDialogRef<DialogOverviewExampleDialog>,
@Inject(MAT_DIALOG_DATA) public data: any) { }
onNoClick(): void {
this.dialogRef.close(this.someValue);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With