【问题标题】:Angular detect if a popup window is opened角度检测是否打开了弹出窗口
【发布时间】:2018-10-01 20:25:42
【问题描述】:

在我的板子中(用 Angular 4 编写),对话打开如下:

导入ActivatedRoute、路由器

import { ActivatedRoute, Router } from '@angular/router';

在构造函数中添加 Router 和 ActivatedRoute 引用

constructor ( ... private _router: Router, private _activatedRoute: ActivatedRoute, ...)

并以下列方式使用它

this._router.navigate(['./', { outlets: { somemodal: 'somemodal', dialogs: null }, relativeTo: this._activatedRoute }]);

要求是,当您点击转义 Esc 时,它应该显示删除模式(其他模式已经实现并正在工作)。

但是 QA 提出了一个问题,例如当其他弹出窗口(如扫描的检查图像/重新扫描弹出窗口/客户 ID 弹出窗口/错误消息弹出窗口)出现然后点击 Esc 那些弹出窗口应该首先关闭。

如果不存在其他弹出窗口,则只会打开删除模式,目前没有发生。在点击 Esc 时,它仍在打开删除弹出窗口。

问题:如何检测是否存在其他弹出窗口。

注意:在开发之初,在某些共享服务中,我们可以创建像isPopupOpened: boolean = true 这样的标志,并且在关闭同一个弹出窗口时它应该变成isPopupOpened = false。但这没有实现,并且实现了几个模式,它们都在我的板上的不同阶段打开。用户可能会在任何时间点按 Esc。所以我想有什么相同的解决方案。

【问题讨论】:

    标签: angular typescript typescript1.4


    【解决方案1】:

    我得到了解决方案。

    keyCommandHandler(command: Command): void {
            switch (command.name) {
              case 'App.Escape':
              if (this._router.url.indexOf('dialogs') === -1  && this._router.url.indexOf('subdialogs') === -1) {
                this.cancelHelper();
              }else {
                this._router.navigate(['./', { outlets: { dialogs: null }, relativeTo: this._activatedRoute }]);
              }
                break;
            }
          }
    

    只需检查您的 URL 中是否存在任何对话框或子对话框。它对我有用。

    【讨论】:

    • 你能展示更多你的解决方案吗?例如命令类和其余部分。感谢您的帮助,谢谢!
    【解决方案2】:

    您可能需要为共享服务中的每个弹出窗口维护一个状态。根据您需要处理弹出显示/关闭和用户按下 ESC 按钮的状态值。处理键盘事件,可以使用指令,在构造函数中注入共享服务来更新状态。

    【讨论】:

    • 问题是可能会打开多个模态弹出窗口,并且对于没有一个模态弹出窗口,在打开时,会在共享服务中创建这样的标志。我在ngOnInit() 中需要这样的东西@ 即this._activatedRoute.params.subscribe((params: any) => { if (params["modal"] === 'true') { this.isModalOpen = true; }else { this.isModalOpen = false; }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多