- 这个例子看到的例子
这是我的 canDeactivate Guard:
export interface CanComponentDeactivate {
canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
}
@Injectable()
export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {
canDeactivate(component: CanComponentDeactivate,
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot) {
return component.canDeactivate ? component.canDeactivate() : true;
}
}
这就是我在 HomeComponent 路由中的称呼:
{ path: 'home', component: HomeComponent, canActivate: [AuthGuard], canDeactivate: [CanDeactivateGuard]},
在 MyService 中,我有这个主题:
private backButtonEnabled = new BehaviorSubject<boolean>(true);
currentBackButtonEnabled = this.backButtonEnabled.asObservable();
changeCurrentBackButtonEnabled(goBack: boolean){
this.backButtonEnabled.next(goBack);
}
在另一个组件中,FiltersComponent,我有这个功能:
openFilters() {
...
this.myService.changeCurrentBackButtonEnabled(false);
}
在 HomeComponent 中,我像这样调用 canDeactivate:
canDeactivate(): Observable<boolean> | boolean | Promise<boolean> {
this.myService.currentBackButtonEnabled.subscribe(res => {
console.log(res) //ALWAYS TRUE
})
return this.myService.currentBackButtonEnabled;
}
在 appModule 中:
...
providers: [
CanDeactivateGuard,
MyService
],
问题陈述:
currentBackButtonEnabled 始终为 true,即使用户(单击)openFilters() 函数,其中 currentBackButtonEnabled 变为 false