等待复选框更改以确认对话框

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了等待复选框更改以确认对话框相关的知识,希望对你有一定的参考价值。

如果我从对话框中单击“否”,我试图停止复选框的更改操作。对话框显示,但在关闭对话框后,我无法使复选框的(更改)发生

我曾尝试使用Promise或在对话框的afterClosed()方法中执行所有操作,但没有任何方法可以在关闭对话框后使复选框(更改)发生。

export class GenericMessageConfirmDialogComponent {

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

  onNoClick(): void {
    this.dialogRef.close(false);
  }

  onYesClick(): void {
    this.dialogRef.close(true);
  }

// html

<input type="checkbox" [(ngModel)]="element.isActive" (change)="onTaskCheckBoxChange(element)" (click)="onTaskCheckBoxClick($event)">

onTaskCheckBoxChange(model: TaskTableEntryModel) {

    console.log("onTaskCheckBoxChange");
    //this always does not wait for the dialog to close
  }

onTaskCheckBoxClick(event: any) {

    let message = "asdhasdlfca asdcasd  asdd";

    var width = 200 + message.length;

    const dialogRef = this.dialog.open(GenericMessageConfirmDialogComponent, {
      width: width + 'px',
      data: { msg: message }
    });

    dialogRef.afterClosed().subscribe(result => {

      if (result == true) {
        console.log("yyyyy");
      } else {
        console.log("nnnn");
        event.preventDefault(); //this should stop the change of the checkbox
      }
    });
}

还尝试过:

let message = "asdhasdlfca asdcasd  asdd";

    var width = 200 + message.length;

    const dialogRef = this.dialog.open(GenericMessageConfirmDialogComponent, {
      width: width + 'px',
      data: { msg: message }
    });

    dialogRef.afterClosed().toPromise().then(data => {
      console.log("pppppppppppp");
      console.log(data);
    });

    console.log("after promise");

在这里,我仍然无法等待承诺完成。行console.log(“承诺后”);将在对话框打开时发生。所以我只需要让它充当同步。

答案
    event.preventDefault(); //this should stop the change of the checkbox

这不起作用,因为您在此处创建的匿名函数是异步调用的,并且在事件完成之后才会调用。

为什么不将element.isActive的值设置为无单击时的先前值。假设element.isActive是一个布尔值。

 dialogRef.afterClosed().subscribe(result => {

      if (result == true) {
        console.log("yyyyy");
      } else {
        element.isActive = !element.isActive;
        console.log("nnnn");
      }
    });

以上是关于等待复选框更改以确认对话框的主要内容,如果未能解决你的问题,请参考以下文章

AlertDialog 更改片段中的背景颜色 [重复]

方向更改时的 DialogFragment 回调

Visual Studio安装项目中的“Checkboxes(A)”和“Checkboxes(B)”对话框之间有什么区别?

任务管理器cpu核数更改方法

如何从确认对话框中获取结果

Vuejs:在路线更改之前显示确认对话框