目前我得到了一些反馈,我不应该这样做,因为我的同事说这是嵌套订阅,应该避免使用它. 我只想在关闭第一个消息对话框后打开一个简单的消息对话框,当第一个消息对话框返回真值时.还有比这个更好的方法吗?

weatherProtectDialog.afterClosed()
    .subscribe((result) => {
      if (result) {
        this.dialog.open(SimpleDialogComponent, {
          data: {
            title: 'title',
            message: 'message',
          },
        });
      }
    });

推荐答案

使用RxJS运算符避免嵌套订阅.

weatherProtectDialog.afterClosed()
.pipe(
    filter(res => res),
    tap(() => this.dialog.open(SimpleDialogComponent, {
        data: {
          title: 'title',
          message: 'message',
        },
    }))
).subscribe()

过滤器操作符:https://rxjs.dev/api/operators/filter

TAP操作员:https://rxjs.dev/api/operators/tap

另一种解决方案可能是将此可观察对象转换为Promise,并使用Async/AWAIT来避免嵌套,但是,由于您使用的是ANGLE,因此我建议您使用RxJS

Angular相关问答推荐

Toastr在独立组件上的Angular17实现

首期日历发行

如何使用ChangeDetectionStrategy.OnPush?

确保我的角库S服务构建提供独立的友好提供功能

Angular 16独立依赖注入问题

显示用户名-Angular

如果observableA在1秒前触发,则过滤掉observableB

NX如何在前端和后端使用一个接口库

Angular,数据显示在控制台但不在应用程序中

在生产模式下使用带Angular 的 livekit

如何在 Angular14 中创建带有验证的自定义输入组件?

应该显示在表格中的嵌套循环

*ngIf 和 *ngFor 在 元素上使用

如何处理解析器中的错误

ViewChild 和 ContentChild 的所有有效 Select 器是什么?

Angular:ViewChild 上未定义 nativeElement

Angular 2从assets文件夹加载CSS背景图像

Lint 错误:实现生命周期挂钩接口

从 Angular 中的自定义表单组件访问 FormControl

Angular 2 中的动态模板 URL