angular项目阻止用户直接修改浏览器地址栏跳转,但是保留浏览器前进后退功能
app.components.ts
import { PlatformLocation } from '@angular/common'; constructor(private location: PlatformLocation){ // 监听直接修改地址栏url实现路由跳转 this.location.onPopState((e) => { // 当用户不是点击浏览器前进后退时标记阻止 if (!e.state) { this.xhr.cnRouterLinkFlag = true; } }); }
auth.guard.ts
canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree { return this.checkLogin(route, state); }
async checkLogin(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { // 禁止直接修改地址栏url或者点击浏览器前进后退实现路由跳转 if (this.xhr.cnRouterLinkFlag) { this.xhr.cnRouterLinkFlag = false; return false; }
}