检查组件内的queryParams,如果找不到,则导航

时间:2016-10-12 15:33:31

标签: angular

我想要做的事情概述:

在组件内部,我想检查特定queryParam的URL。如果找到了,我想做一件事。如果没有,我想在URL中添加一个queryParam并做另一件事。

我认为最好的方法是使用ActivatedRoute.snapshot。但是,如果我试试这个:

ngOnInit(){
  if (this._route.snapshot.queryParams['id']){
    ...
  } else {
    this._router.navigate([ "home" ], { queryParams: {id:"1"} });
    ...
  }
}

注意:_route是ActivatedRoute的一个实例,_router是Router的一个实例。此外,我在" home"在这里路线。

问题:

  1. 无论我在网址中添加什么内容,快照都是空的。我可以添加一个?id = 1,它仍然是一个空对象。
  2. 由于快照为空,因此会进入else块。但是,在那里,它不会添加queryParam。没有错误,路由就不会发生。
  3. 我注意到我可以将这个if..else包装在一个0ms的setTimeout中,并且它可以正常工作。但是,我不想这样做。有没有建议最好的方法来达到这个目标?

    这是我的路由配置:

    @NgModule({
      imports: [
        RouterModule.forRoot([
          {
            path: 'home',
            component: ComponentA,
            children: [
              { path: 'search', component: ComponentB },
              { path: 'rfis', component: ComponentC },
              { path: 'cip', component: ComponentD },
              { path: '', component: ComponentE }
            ]
          },
          {
            path: '',
            redirectTo: 'home',
            pathMatch: 'full'
          }
        ])
      ],
      exports: [
        RouterModule
      ]
     })
    

    我尝试添加此逻辑的组件不在路由中。它直接添加到主路由的HTML模板中。也许这是一个问题?

0 个答案:

没有答案