【问题标题】:mat Dialog: How to create 2 custom dialogs with different stylesmat Dialog:如何创建 2 个具有不同样式的自定义对话框
【发布时间】:2025-11-22 08:05:01
【问题描述】:

我有 2 个组件(每个组件 1 个对话框),我想要一个不透明度为 0 的对话框,以及另一个不透明度为 1 的对话框。 我用这个:

::ng-deep {
  .cdk-overlay-backdrop.cdk-overlay-backdrop-showing {
    opacity: 0;
}

但它也会影响其他垫子对话框。我能做什么?

【问题讨论】:

  • 使用 ng-deep 可以使您的样式应用于多个(不需要的)目标。你能在两个对话框中显示你的 html 吗?
  • 我不能,抱歉。
  • 你是通过打字稿还是静态 html 创建这些对话框?
  • 嗯,我解决了:)。我用过:背景类:'tt'
  • 但我不知道为什么有效:))。

标签: angular sass angular-material mat-dialog


【解决方案1】:

当您使用 open 方法打开对话框时,您可以将配置添加到您想要的对话框中。您可以在此处查看所有可用的 MatDialogConfig 属性 - https://material.angular.io/components/dialog/api

在这种情况下,您可以通过将其添加到配置来创建自定义背景类。

let dialogRef1 = dialog.open(MyDialogComponent, {
  backdropClass: 'backdrop-class-name-1'
});

然后你可以使用 ng-deep 添加你想要的样式。

::ng-deep {
  .cdk-overlay-backdrop.cdk-overlay-backdrop-showing {
    .backdrop-class-name-1 {
      opacity: 0;
    }
  }
}

那么对于另一个对话框,你只需要更改背景类的名称。

let dialogRef2 = dialog.open(MyDialogComponent, {
  backdropClass: 'backdrop-class-name-2'
});

然后应用样式

::ng-deep {
  .cdk-overlay-backdrop.cdk-overlay-backdrop-showing {
    .backdrop-class-name-2 {
      opacity: 1;
    }
  }
}

这样,两个对话框使用ng-deep就不会相互影响了。

【讨论】:

    最近更新 更多