首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >立即访问角4查询参数?

立即访问角4查询参数?
EN

Stack Overflow用户
提问于 2017-05-30 22:05:26
回答 1查看 1.9K关注 0票数 2

在我的AppComponent中,我正在做一个启动检查。如果应用程序是使用具有sessionId的查询字符串打开的,那么我们就可以开始了,我希望将它们路由到/application路径。否则,我希望它们导航到/create会话路径。问题是,在应用程序看到查询参数之前,params订阅会触发一次,这意味着sees语句总是被触发,并且用户被自动重定向到创建会话路径。

代码语言:javascript
复制
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中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-31 02:14:31

您可以使用卫兵在角中实现此功能。

创建一个这样的守卫:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
export const routes: Routes = [
  {
    path: '**',
    component: SomeComponent,
    canActivate: [SomeGuard]
  }
];

不要忘记在提供程序中添加保护:

代码语言:javascript
复制
@NgModule({
  providers: [SomeGuard]
})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44272681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档