使用 Angular Material 和 Safari 从另一个对话框打开对话框

Opening dialog from another dialog with Angular Material and Safari

请查看以下应用程序:

https://stackblitz.com/edit/angular-1qxhep

我正在尝试从另一个对话框中打开一个对话框。共享示例在 Chrome 中运行良好,但在 Safari 中不起作用。

如果您在 safari 中检查两个 console.log() 语句,结果看起来会有所不同:

Safari

第一个对话信息:

MatDialogRef {_overlayRef: OverlayRef, _containerInstance: MatDialogContainer, id: "dialog1", disableClose: false, _afterOpen: Subject, …}

第二个对话信息:

MatDialogRef {_overlayRef: OverlayRef, _containerInstance: MatDialogContainer, id: "dialog1", disableClose: false, _afterOpen: Subject, …}

Chrome

第一个对话信息:

MatDialogRef {_overlayRef: OverlayRef, _containerInstance: MatDialogContainer, id: "dialog1", disableClose: false, _afterOpen: Subject, …}

第二个对话信息:

MatDialogRef {_overlayRef: OverlayRef, _containerInstance: MatDialogContainer, id: "dialog2", disableClose: false, _afterOpen: Subject, …}

请注意,对于 Chrome,传递给对话框的 'id' 参数已正确获取,对于 Safari,我没有得到相同的行为,因此 Safari 不会打开第二个对话框面板。

那是因为 Safari 本身不支持 Web 动画 API,您必须安装 web-animations-js。下面的 GIF 展示了如何安装对 Stackblitz 的依赖:

如果画质有点模糊请见谅

并取消注释 polyfills.ts 中的这一行:

/** ALL Firefox browsers require the following to support `@angular/animation`. **/
import 'web-animations-js';  // <- Uncomment this line

这是 support status for Web Animations API

最后,请不要将 unpkg 用于主题,因为它会从最新的 master 获取 CSS,并且可能会引入重大更改。相反,在 styles.css 中使用它如下:

@import '~@angular/material/prebuilt-themes/indigo-pink.css';

Updated demo