Material Dialog 教學 - slioplark/angular-tutorial GitHub Wiki
ng g c Dialog
ng g c OpenDialog
- DialogComponent:用來開啟 dialog 的 component
- OpenDialogComponent:當 dialog 被開啟時,便會載入的 component
因為 OpenDialogComponent 是「動態載入」的 component,所以需寫入 entryComponents 陣列。
@NgModule({
entryComponents: [
OpenDialogComponent
]
})
export class MaterialModule { }
constructor(private dialog: MatDialog) { }
主要有兩個參數:
- 載入 dialog 的 component,如
OpenDialogComponent
- 設定 dialog 的 config 物件,含高度、寬度,或傳入 data 以顯示資料
openDialog() {
const dialogRef = this.dialog.open(OpenDialogComponent, {
width: '500px',
data: { title: 'Install Angular' }
});
dialogRef.afterClosed().subscribe(result => {
console.log('The dialog was closed');
});
}
透過 openDialog() 方法以開啟 dialog。
<button (click)="openDialog()">Open Dialog</button>
data 是來自於 DialogComponent 設定的 vaule。
constructor(@Inject(MAT_DIALOG_DATA) public data: any) { }
{{ data.title }}
<h2 mat-dialog-title>
<!-- 標題 -->
</h2>
<mat-dialog-content class="mat-typography">
<!-- 內容 -->
</mat-dialog-content>
<mat-dialog-actions align="end">
<!-- 按鈕 -->
</mat-dialog-actions>
透過 property binding 以 true 的結果傳回開啟 dialog 的組件(OpenDialogComponent),如下:
<mat-dialog-actions align="end">
<button mat-button [mat-dialog-close]="true" cdkFocusInitial>Install</button>
</mat-dialog-actions>
mat-dialog-close 是一個只能放在 button 標籤裡面的 directive。 不但能協助 button 關閉 dialog,也能把「結果」傳回開啟 dialog 的組件。
依賴注入 MatDialogRef,並在「泛型」加入對應的 dialog 組件。
constructor(private dialogRef: MatDialogRef<OpenDialogComponent>) { }
使用 dialogRef 的 close() 方法,把需傳回的結果作為「參數」傳入,並關閉 dialog。
cancel() {
this.dialogRef.close(false);
}
利用 click 事件觸發 cancel() 方法。
<mat-dialog-actions align="end">
<button mat-button (click)="cancel()">Cancel</button>
</mat-dialog-actions>