在我的AppComponent中,我正在做一个启动检查。如果应用程序是使用具有sessionId的查询字符串打开的,那么我们就可以开始了,我希望将它们路由到/application路径。否则,我希望它们导航到/create会话路径。问题是,在应用程序看到查询参数之前,params订阅会触发一次,这意味着sees语句总是被触发,并且用户被自动重定向到创建会话路径。
this.route.queryParams.subscribe(params => {
if(params.sid) {
this.ngRedux.dispatch(this.sessionActions.setSessionId(params.sid));
this.router.navigate(['application'])
}
else{
this.router.navigate(['create-session'])
}
})我试着在没有任何数据的情况下过滤订阅:
.first((val, idx, src)=> Object.keys(val).length > 0)
但是当没有查询参数时,它就不会触发。有没有一种不需要订阅ActivatedRoute就可以获得params的即时快照的方法?
注意:此订阅发生在ngOnInit中。
发布于 2017-05-31 02:14:31
您可以使用卫兵在角中实现此功能。
创建一个这样的守卫:
@Injectable()
export class SomeGuard implements CanActivate {
constructor(
private router: Router) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot) {
console.log('state params', state.root.queryParams);
if (state.root.queryParams.sid){
this.router.navigate(['application'])
} else {
this.router.navigate(['create-session'])
}
return false;
}
}然后在要执行此逻辑的路由上将保护添加到canActivate:
export const routes: Routes = [
{
path: '**',
component: SomeComponent,
canActivate: [SomeGuard]
}
];不要忘记在提供程序中添加保护:
@NgModule({
providers: [SomeGuard]
})https://stackoverflow.com/questions/44272681
复制相似问题