Как выполнить метод после того, как пользователь решит покинуть страницу с помощью @HostListener ('window: beforeunload') - PullRequest
1 голос
/ 27 июня 2019

Я использую @HostListener('window:beforeunload'), чтобы определить, покидает ли пользователь страницу. Затем открывается диалог. Если она уходит, я хочу, чтобы событие было запущено (или был вызван метод). Если пользователь не уходит, я не хочу, чтобы это событие было запущено.

Если я это сделаю:

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

someFunction ВСЕГДА называется. Я хочу знать ответ пользователя перед вызовом этой функции.

Если я читаю это или это , кажется, что эти решения должны работать и для моего случая, но я не понимаю, как они справляются с выбором пользователя (уходить или оставаться) чтобы знать, должна ли функция вызываться или нет.

Может быть, это связано с $event, который я не использую в @HostListener('window:beforeunload', ['$event'])?

1 Ответ

0 голосов
/ 27 июня 2019

Вы можете реализовать canDeactivate guard, как это. Вы можете добавить подтверждение, чтобы обнаружить, что пользователь выбрал ok, или отменить, как это.

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;
    }
  }
...