角度材料:弹出窗口:允许窗口移动到第二个监视器屏幕

Posted

技术标签:

【中文标题】角度材料:弹出窗口:允许窗口移动到第二个监视器屏幕【英文标题】:Angular Material: Popup Windows : Allow Window Move to Second Monitor Screen 【发布时间】:2020-10-30 14:57:02 【问题描述】:

尝试使用 Angular 材质对话框或任何弹出窗口组件。有以下工作,除了最后一个主题。

a) 返回原始屏幕不应灰显,

b) 用户允许在其后面的原始第一个窗口中单击返回

c) 将数据发送回原始窗口组件。

d) 允许用户将模式/弹出窗口移动到第二个监视器屏幕,双监视器。这不起作用。

只是它应该是常规弹出窗口。 如何在 Angular Material Dialog 中做到这一点?

public openPropertySearchDialog(): void 
    const propertySearchDialogRef = this.openPropertySearchDialog.open(DocumentPropertyGridComponent, 
      width: '800px',
      height: '450px',
      disableClose: true,
      autoFocus: false,
      data: "test",
      hasBackdrop: false
    );

    propertySearchDialogRef.afterClosed().subscribe(result => );
  

我们可以使用 javascript window.open,但更喜欢提供完整数据绑定通信服务的 Angular Material。 如果有其他 Angular 选项,也可以作为答案。

基本上用户按下组件 1:“添加文档”变量:selectedDocumentList: Array<string>,并发送数据箭头组件 2:cumulativeDocumentList: Arrays<string>。累积列表实时更新。让它与材料窗口对话框一起使用。

(点击图片放大)

资源:

How can i make a MatDialog draggable / Angular Material

【问题讨论】:

【参考方案1】:

Material Dialog 不是窗口。它只是在绝对位置弹出的 html 元素,即使您将其设为可拖动,它也仅适用于当前窗口,不会超出当前选项卡。 window.open 可能是要走的路。

想法:

可以使用仅包含 Material Dialog 的组件创建路由并在 AfterViewInit 挂钩上打开它。

像 https://localhost:8443/dialogs/1 路由和

当您需要在新窗口中打开对话框时,您会调用

  open() 
    const myWindow = window.open(
      'https://localhost:8443/dialogs/1',
      '_blank',
      'width=200, height=100'
    );
  

从弹出窗口里面

  onNoClick(data: string): void 
    this.dialogRef.close();
    console.log(window.opener);
    const parent = window.opener;
    // But is it possible to pass data to parent and make a change?
    // window.close();
  

How to expose angular 2 methods publicly?

【讨论】:

好的,问题是使用 Angular 和双向通信绑定的解决方案,Angular 有任何库选项吗?谢谢 这个要求让事情变得非常复杂。如果这是一个硬性要求,您可能不得不问自己浏览器应用程序是否适合。没有一个简单的答案。 嗨 @MikeOne 我相信人们在 Angular 中很多人都有这个话题,不确定在对话框或窗口之间进行通信的最佳方式是什么,如果 Angular 材料不起作用,则可以使用任何 Angular 解决方案 嗯,我能想到的唯一方法是让它工作是你在一个新窗口中打开 MatDialog ,当对话框关闭时,它会关闭弹出窗口并将数据传递给父并关闭窗口。但问题是我们如何从窗口对象中获取组件的实例。 可能是广播频道或本地存储?【参考方案2】:

其实并不是把组件拖出屏幕那么简单。 一种可能的解决方法是向要拖动的模态添加一个按钮,并使该按钮在不同的浏览器选项卡中打开某个组件,您可以将其拖到窗口外的另一个屏幕中。这会带来一些挑战,例如,这个组件需要路由,可能使用不同的路由器插座,因为您想使用不同的布局。

祝你好运

【讨论】:

以上是关于角度材料:弹出窗口:允许窗口移动到第二个监视器屏幕的主要内容,如果未能解决你的问题,请参考以下文章

移动 QMainWindow 不会影响子窗口小部件的绘制位置

在 Java 中限制窗口大小

想让JS弹出窗口显示在第二个(辅助)显示器上?

如何从第一个弹出窗口中打开第二个 jquery-mobile 弹出窗口

如何让WPF弹出窗口不被隐藏在主应用程序后面?

如何从弹出窗口向 boxlayout 添加新标签?