【问题标题】:How to get data from MatDialog?如何从 MatDialog 获取数据?
【发布时间】:2023-03-26 23:42:01
【问题描述】:

我正在关注here 中的文档。 我可以将数据传递给对话框,但我没有从中获取数据。 我在 .afterClose().subscribe() 上得到了未定义的结果。 我错过了什么?我猜我需要在对话框的模板中做一些事情,但上面的文档没有提供示例。 这是我的代码:

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

import {MySavior} from '../shared/my-savior';
import {Savior} from '../../savior/shared/savior';
import {SaviorDataService} from '../../savior/shared/savior-data.service';

@Component({
  selector: 'app-my-room-savior-select-dialog',
  template: 'my data name: {{data.name}}'
})
export class MySaviorSelectDialogComponent {
  constructor(public dialogRef: MatDialogRef<MySaviorSelectDialogComponent>,
    @Inject(MAT_DIALOG_DATA) public data: any) {}

  onClose(): void {
    this.dialogRef.close();
  }
}


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

  saviors: Savior[] = [];
  mySaviors: MySavior[] = [];

  constructor(private saviorDataServ: SaviorDataService, public dialog: MatDialog) {}

  ngOnInit() {
    ...
  }

  openSelectDialog(): void {
    const dialogRef = this.dialog.open(MySaviorSelectDialogComponent, {data: {name: 'test'}});
    dialogRef.afterClosed().subscribe(result => {
      console.log('result ' + result); //i got result undefined 
    });
  }

}

【问题讨论】:

    标签: angular angular-material


    【解决方案1】:

    如果您想根据关闭对话框的方式返回数据,还有另一种方法,例如如果您的对话框中有“保存”按钮,并且不想在以“取消”按钮等其他方式关闭它时保存,请单击外部或按 Esc

    来自文档:

    mat-dialog-close [Attr] 添加到 a ,使按钮关闭 带有来自绑定值的可选结果的对话框。

    所以在 MySaviorSelectDialogComponent HTML 标记中使用

    <button mat-button mat-dialog-close>Cancel</button>
    <button mat-button [mat-dialog-close]="data">Save</button>
    

    让“取消”返回空值,“保存”返回数据属性。

    【讨论】:

      【解决方案2】:
      @Component({ 
        selector: 'app-my-room-savior-select-dialog', 
        template: 'my data name: {{data.name}}' 
      }) 
      
      export class MySaviorSelectDialogComponent implements OnInit {
      
        name: string;
      
        constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) 
         public data) {}
      
        ngOnInit() { this.name = this.data.name; console.log(this.name); }
      }
      

      【讨论】:

      • 解释你的答案更多。
      【解决方案3】:

      当我注意到我们可以在 MatDialogRef.close() 上传递数据后,我想通了。

      onClose(): void {
          this.dialogRef.close('pass data here');
      }
      

      文档只提供了 onNoClick() 函数,顺便说一下不需要传递任何数据。另一方面,我认为 onOkClick() 应该或多或少像上面的 onClose() 。我不知道他们为什么不将其包含在文档中。

      【讨论】:

        猜你喜欢
        • 2020-03-15
        • 2020-01-29
        • 2021-02-10
        • 2018-12-25
        • 2018-02-22
        • 2019-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多