离开申请时如何使用CanDeactivate Guard(NOT组件)

时间:2019-05-08 12:47:57

标签: angular angular-router-guards

在我的应用程序中,可以对用户进行测试,查看测试结果。而这一切都无需注册(例如登录密码)。但是,如果他想离开该应用程序,我想提供给他注册,否则他的数据将不会保存。 我不想在离开某个组件时提供注册,仅当他想离开应用程序时。 我是新手。也许对于这个问题,还有一个角度解决方案,与CanDeactivate保护无关。

更新:

感谢谢尔盖·梅尔(Sergey Mell),他的角度如下:

export abstract class DeactivationGuarded {
 abstract canDeactivate(): Observable<boolean> | Promise<boolean> | boolean;
 @HostListener('window:beforeunload', ['$event'])
 unloadNotification($event: any) {
  if (!this.canDeactivate()) {
   $event.returnValue = true;
  }
 }
}

然后从DeactivationGuarded扩展根组件。

但不适用于'onpagehide'。

1 个答案:

答案 0 :(得分:1)

您的解决方案看起来应该像这样

function myConfirmation() {
    if (user.isRegistered) {
       return;
    }
    // Open your fancy registration dialog here;
    return 'Please, register. Otherwise your data will not be saved';
}

window.onbeforeunload = myConfirmation;