美文网首页程序员
Angular Material UI Dialog的使用

Angular Material UI Dialog的使用

作者: 柳源居士 | 来源:发表于2018-11-14 00:34 被阅读442次
  1. 初识Material Dialog
    Material Dialog是用来启动一个对话框,来询问使用者的操作意图的功能组件,并且它还可以将数据传送回调用者。Material Dialog自身符合material design 风格以及动画。
    Material Dialog包含了标题区域、内容区域、actions 区域以及mat-dialog-close区域。
    标题区域可以用来做一些功能提醒,内容区域用来定义功能,actions区域默认包含了取消 与提交 功能。mat-dialog-close需要绑定一个button,来触发对话框关闭时,通知消息的传递。
  2. 如何使用Material Dialog
    使用Material Dialog,我们可以先想象出来二个组件,一个用来调用Material Dialog(下面称为调用者组件)的组件,一个是包含Material Dialog自身功能设计的组件(下面称为MD自身组件)。
    使用情景:在调用者组件中需要有一个函数,来启动Material Dialog组件。当MD自身组件关闭或者提交后,能将数据回传给调用者组件。
    使用:
    调用者组件要想使用Material Dialog,首先要引入相关的依赖:
import { MatDialog } from '@angular/material';

引入依赖之后,需要在调用者组件的构造函数里面声明依赖:

constructor(public dialog: MatDialog) {}

前面我们说过,调用者组件需要一个打开MD自身组件的函数:

 openDialog(): void {
    let dialogRef = dialog.open(MD自身组件, 
      {height: '400px',       
       width:'600px',
      });
}

MatDialog的open方法会返回一个MatDialogRef对象,因此,我们同样需要把这个对象的依赖导入。修改import 声明:

import { MatDialog, MatDialogRef } from '@angular/material';

同时MatDialogRef提供了打开了的对话框的处理器,它可以关闭对话框,以及在关闭对话框之后,处理从对话框中获得的通知消息。
在MD自身组件中:

 //关闭对话框,并传递通知消息
dialogRef.close("通知消息");

在调用者组件中:

openDialog(): void {
    let dialogRef = dialog.open(MD自身组件, 
      {height: '400px',       
       width:'600px',
        data: {
        key: value
      }
      });

    // 关闭对话框之后处理消息。此方法返回一个可观察对象,通过订阅这个可观察对      
    // 象来处理对话框返回的通知消息。
    dialogRef.afterClosed().subscribe(next);   
}

data:{}可以用来从调用者组件向MD自身组件传递数据。

然而事情显然没有那么简单,MD自身组件如果要发送消息,还要引入一个依赖:
MAT_DIALOG_DATA

import {Component, Inject} from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';

MD自身组件构造方法需要DI一下 MAT_DIALOG_DATA ,并指定MatDialogRef的泛型类型(这个组件自身)。

 constructor(
    public dialogRef: MatDialogRef<DialogOverviewExampleDialog>,
    @Inject(MAT_DIALOG_DATA) public data: DialogData) {
}

DialogData数据可以是任意类型,比如字符串,类对象等等。
在对话框的actions里面,可以传递出需要返回的消息:

<div mat-dialog-actions>
  <button mat-button (click)="onNoClick()">No Thanks</button>
  <button mat-button [mat-dialog-close]="data.animal" cdkFocusInitial>Ok</button>
</div>

大功告成了?没有,现在还有最后一步:
因为Dialog 是运行时才调用的,因此,我们需要让angular 编译器知道如何创建它。
angular 编译器使用ComponentFactory来创建组件,如果某个组件包含了Dialog 组件,那么这个调用者组件需要在NgMoudle的entryComponent里面注册一下:

@NgModule({
  imports: [
    // ...
    MatDialogModule
  ],
  declarations: [
    AppComponent,
    ExampleDialogComponent
  ],

  entryComponents: [
    ExampleDialogComponent
  ],

  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule {}

不要忘了在根模块里导入MatDialogModule!

相关文章

网友评论

    本文标题:Angular Material UI Dialog的使用

    本文链接:https://www.haomeiwen.com/subject/xtprfqtx.html