angular - 如何在 Angular 4 中单击浏览器后退按钮时提醒用户?

标签 angular angular4-router

如何在 Angular 4 中单击浏览器后退按钮时提醒用户?

onpopstate 即使在页面第一次加载时也会被调用

import {  PlatformLocation } from '@angular/common';

    constructor( private platformLocation: PlatformLocation) {
        platformLocation.onPopState(() => {
          console.log("onPopState called");
          window.alert("your data will be lost");
        })
    }

最佳答案

添加一个candeactivate守卫

可以停用-guard.service.ts

import {Observable} from 'rxjs';
import {CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router';

export interface CanComponentDeactivate {
  canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
}

export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {
  canDeactivate(component: CanComponentDeactivate, 
                currentRoute: ActivatedRouteSnapshot,
                currentState: RouterStateSnapshot,
                nextState?: RouterStateSnapshot
                ) : Observable<boolean> | Promise<boolean> | boolean {
    return component.canDeactivate();
  }
}

在您的路由设置中

const route: Route = [
  {path: '', component: AppComponent, canDeactivate: [CanDeactivateGuard]}
]

提供您可以在providers数组中的app.module中停用守卫。

考虑以下组件,其中我有变量来检查已保存的更改

export class AppComponent implements CanComponentDeactivate {
   changesSaved = false;
   onUpdateServer() {
     this.changesSaved = true;
   }
   canDeactivate() {
      if(this.changesSaved) {
        return true;
      } else {
        return confirm('Do you want to discard changes');
      }
   }
}

关于angular - 如何在 Angular 4 中单击浏览器后退按钮时提醒用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48699611/

相关文章:

angular - 如何让 matIconRegistry.addSvgIcon 找到正确的路径

angular - fullcalendar '' has no exported member ' 选项'.- Angular 出错

css - 使用 css backface 属性时 Angular Material 输入字段不起作用

angular - 以 Angular 4 的路线更改自动保存表单/模型内容

angular4 路由没有保持刷新

angular - 刷新页面会导致 404 错误 - AWS - Angular 6

angular - 如何使用 Azure AD 作为身份提供者为 Angular 7.x 应用程序实现基于 SAML 的身份验证?

twitter-bootstrap - Bootstrap 风格不适用于 Angular2 组件

angular - 哈希位置策略不起作用——Angular 4——NgxChartsModule 破坏了哈希位置策略

angular - 无法绑定(bind)到 'routerLink',因为它不是 'a' 的已知属性。尽管引用了路由器模块,但还是有错误