首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >卸载事件前的Angular8 IFrame

卸载事件前的Angular8 IFrame
EN

Stack Overflow用户
提问于 2020-06-02 16:10:15
回答 4查看 812关注 0票数 4

我有一个角度应用程序,它是主要的应用程序,在里面托管子应用程序。子应用也是角度应用。加载子应用程序的方式是通过Iframes。

子应用程序显示为一个列表,当我单击一个选项卡时,该应用程序将被加载。当我对应用程序中的数据进行一些更改时,如果我单击另一个子选项卡,我想显示一条警告消息:“更改将丢失”。我能够实现它使用前卸载事件,如下所示。我可以检查是否有任何未保存的更改,并显示警告弹出。

代码语言:javascript
复制
  @HostListener('window:beforeunload', ['$event'])
  unloadNotification($event: any) {
      if (**my logic here) {
          $event.returnValue =true;
      }
  }

唯一的问题是,当我单击另一个子选项卡时,主机应用程序会高亮显示该子选项卡,然后显示警告弹出。如果我点击弹出窗口上的停留按钮,我可以在我想要的子选项卡上,但是在主机应用程序上,另一个子选项卡会被高亮显示。因此,如果我想保持在当前的子选项卡上,那么我试图找到一种不突出显示其他选项卡的方法。在卸货之前。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-06-12 00:47:20

儿童应用程序

代码语言:javascript
复制
const origin = this.getCurrentHostOrigin();
if (cancelSwitchTab) {
    window.parent.postMessage({}, origin); 
}

在主机应用程序中:

代码语言:javascript
复制
this.renderer.listen(this.windowsRef.nativeWindow, 'message', event => {
  const message = event.data;
  *** your logic to revert highlight to current tab ***
});
票数 -1
EN

Stack Overflow用户

发布于 2020-06-05 23:51:11

我的理解是,您必须更新一个现有的项目,该项目的构造方式是使用beforeunload事件来实现类似于称为路由保护的角度特性。根据在beforeunload事件帮助下实现的逻辑,可以加载或不加载所选的iframe。您似乎不喜欢改变这个实现,这就是为什么要寻找一个解决方案来满足您的需求,应用类似于另一个窗口事件的方法。

如果我的理解是正确的,那么您需要重构这个实现,以便根据“主机应用程序”的内部工作情况进行“守护”,而“主机应用程序”实际上首先必须在内部工作。出现此问题的原因是,在取消iframe的卸载事件时,主机应用程序的“取消”选项卡已经被选中。

简而言之,这似乎是在选项卡的选择事件中处理的。我的回答可能会或可能不会提出一个您会接受的解决方案,因为我们没有像您使用的组件那样的所有细节,所以我只能提供一个伪解决方案:

在进行导航选项卡的ui逻辑的组件中:

代码语言:javascript
复制
onTabSelected(selectedIndex) {
    if (..your logic here) {
        loadIframe(selectedIndex);
        highlightTab(selectedIndex);
    }
}
票数 5
EN

Stack Overflow用户

发布于 2020-06-09 12:32:31

没有像beforeUnload之前那样的事件。两个应用程序,即主机和子程序可以通过postMessage进行通信。因此,在beforeUnload事件中,您可以向子应用程序发送一个postMessage以突出显示现有选项卡。例如:-假设您在变量名child1中引用了子窗口。

代码语言:javascript
复制
  child1.postMessage('{'tabId': 'tab1'}');

您的子应用程序可以接收此消息并用标识符tab1突出显示该选项卡。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62156377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档