我在保护路由方面遇到了一些奇怪的问题。 情况如下: 页面A有一个警卫,警卫检查它是否拥有访问该页面的所有内容。如果不是,它将重定向到页面B以获得它所需的一切,例如选择客户端。 当该用户在没有正确信息的情况下导航回到页面A时,它将被重定向回到页面B. 这是一切都出错的地方,因为不允许用户进入Page A我从警卫处返回一个错误并进行重定向。 但是我的商店说路线是A页,但是因为我拒绝导航,我仍然在第B页。
这种情况在代码中如下所示:
保护
canActivate(route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): boolean {
if (got_what_i_need) {
return true;
} else {
this.store.dispatch(new RouterActions.Go({
path: ['pageB']
}
return false;
}
路线
const appRoutes: Routes = [
{ path: RoutePaths.pageA, loadChildren: './pageA', canActivate: [PortalDetectionGuard] },
{ path: RoutePaths.PageB, loadChildren: './pageB'},
任何人都知道我在这里做错了什么? 此外,每当我返回false时,当前页面也不会被破坏或重新初始化。
提前致谢!
答案 0 :(得分:0)
尝试使用其他导航策略:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
if (got_what_i_need) {
return true;
} else {
this.router.navigate(['page-B'])
}
return false;
}
您需要在Guard的构造函数中插入路由器。
constructor(private navigationService: NavigationService)
如果这不起作用,也许" got_what_i_need"部分是原因。