【问题标题】:How to execute a method after the user decides to leave a page with @HostListener('window:beforeunload')用户决定使用@HostListener('window:beforeunload') 离开页面后如何执行方法
【发布时间】:2019-11-09 13:13:19
【问题描述】:

我使用@HostListener('window:beforeunload') 来检测用户是否离开页面。然后打开一个对话框。如果她离开,我希望触发一个事件(或调用一个方法)。如果用户不离开,我不希望触发此事件。

如果我这样做:

  @HostListener('window:beforeunload')
  private someFunction() {
    WHATEVER
  }

someFunction 总是被调用。在调用这个函数之前,我想知道用户的回答。

如果我阅读 thisthis 似乎这些解决方案也适用于我的情况,但我看不出它们如何处理用户的选择(离开或留下)以了解该功能是否必须调用与否。

会不会和我在@HostListener('window:beforeunload', ['$event'])中没有使用的$event有关?

【问题讨论】:

    标签: javascript node.js angular typescript rxjs


    【解决方案1】:

    你可以像这样实现 canDeactivate 守卫 您可以像这样添加确认以检测用户选择确定或取消

    canDeactivate(component: ComponentCanDeactivate): boolean | Observable<boolean> 
    {
      let confirmObject = confirm("You want to leave ?");
      if (confirmObject  == true) {
        //call some thing then return true;
        return true;
      } 
      else {
        return false;
      }
    }
    

    更新也许你可以尝试使用相同的canDeactivate代码

    @HostListener('window:beforeunload')
      private someFunction() {
        let confirmObject = confirm("You want to leave ?");
        if (confirmObject  == true) {
          //call some thing then return true;
          return true;
        } 
        else {
          return false;
        }
      }
    

    【讨论】:

    • 如果用户想使用链接离开页面,这很有效。例如,在关闭浏览器时不会。这是window:beforeunload 被解雇的时候......
    • 所以你想在用户关闭浏览器时执行一些功能?
    • 关闭浏览器、关闭标签页、手动更改url...window:beforeunload涵盖的所有情况。
    • 好吧,我还没试过,但我想现在你会有 2 个确认弹出窗口,这本身并不好,而且,用户可以在第一个说“离开”并在第二个“停留”......我想要的是得到window:beforeunload弹出窗口的响应。
    • 不,我的意思是你可以尝试我提供给你的两种方法
    猜你喜欢
    • 2018-04-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多