【发布时间】:2020-02-26 15:11:42
【问题描述】:
我希望当有人按下浏览器的后退按钮来警告他,如果他按下确定,那么我将重定向到主页组件。我使用 CanDeactivate Guard,我想更改 CanDeactivateGuard 的 nextState。我试图改变 nextState :
nextState = { root: currentRoute, url: '/' }
但总是将我重定向到上一个组件
can-deactivate-guard.service.ts
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
export interface CanComponentDeactivate {
canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
}
@Injectable({
providedIn: 'root'
})
export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {
canDeactivate(component: CanComponentDeactivate,
currentRoute: ActivatedRouteSnapshot,
currentState: RouterStateSnapshot,
nextState?: RouterStateSnapshot
): Observable<boolean> | Promise<boolean> | boolean {
nextState = { root: currentRoute, url: '/' }// try this, but dosen't work
return component.canDeactivate();
}
}
我的组件代码。 pressContinue 只是一个布尔值,以防有人按下下一个组件的继续按钮。
canDeactivate() {
if (this.pressContinue) {
return true;
} else {
return confirm('Are you sure?');
}
}
【问题讨论】:
-
我将组件代码的逻辑更改为并工作:canDeactivate() { if (this.pressContinue) { return true; } else { var resp = confirm('你确定吗?'); if(resp == true) window.location.href = '';返回假; } }
标签: angular angular-router-guards