【问题标题】:Angular Material Dialog afterClosed()角材质对话框 afterClosed()
【发布时间】:2018-08-06 09:31:30
【问题描述】:

我想使用 Angular 材质对话框创建一个是/否函数,该函数根据是否按下是或否返回真或假。在是/否对话框中,我有这些按钮:

<button [mat-dialog-close]="true">Yes</button>
<button [mat-dialog-close]="false">No</button>

在我的dialogservice 中,我通过这样做将这个是/否对话框称为:

Yes_No_Prompt(pMessageLines: string[]) {
    const yesNoDialog = this.matdialog.open(DlgYesNoComponent, {
        data: {
            MessageLines: pMessageLines
        }
    });

    yesNoDialog.afterClosed().subscribe(
        (result: boolean) => {
            return result;
        }
    );
}

但是如何让这个函数等待return result 行呢?因为我现在想通过执行以下操作来使用此功能:

if (this.dialogservice.Yes_No_Prompt()) {
    // something is true (pressed yes)
} else {
    // something if false (pressed no)
}

我需要等待return result 行,但我不知道怎么做。也许是一个承诺?

【问题讨论】:

  • P.S.命名函数时考虑使用camelCase而不是下划线。
  • @Edric 你介意解释一下为什么是 Edric 吗?我觉得你可以使用任何你想要的约定。我们的团队使用骆驼表示变量,使用下划线表示函数,用破折号表示 css……真的很重要吗?
  • IMO,我很习惯使用camelCase 来处理函数,但这只是我的看法。我同意你的观点,可以使用任何编码约定。
  • @Edric 好吧,那都是好人。老实说,我想这根本不重要。只要团队决定使用约定。

标签: angular promise return angular-material


【解决方案1】:

当您使用subscribe 时,您已经在使用Observable。只需像这样从Yes_No_Prompt 返回 Observable:

Yes_No_Prompt(pMessageLines: string[]): Observable<boolean> {
  const yesNoDialog = this.matdialog.open(DlgYesNoComponent, {
    data: {
        MessageLines: pMessageLines
    }
  });

  return yesNoDialog.afterClosed();
}

然后

this.dialogservice.Yes_No_Prompt().subscribe(result => {
   if(result) {
     // something is true (pressed yes)
   } else {
     // something if false (pressed no)
   } 
});

【讨论】:

  • 这里实际上不需要相等性检查,因为如果结果是真值,if 语句应该执行第一个代码段。
  • 不确定 MatDialog 能返回什么,不能返回什么,但我相信你并编辑了我的帖子。
  • @GiacomoVoß 谢谢你的回答!这是完美的:)
  • 一旦你积极尝试不订阅可观察对象,直到你绝对必须这样做,那么你真的会开始欣赏链接的好处:-)
猜你喜欢
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 2020-02-23
  • 2021-08-22
  • 2017-11-02
  • 2017-12-19
  • 2018-06-30
  • 1970-01-01
相关资源
最近更新 更多