2017-08-10 92 views
0

我一直是用来重定向从一个路由到另外一个很简单的角度路由模块:定义角路线根据路由参数重定向

import { NgModule } from '@angular/core'; 
import { Routes, RouterModule } from '@angular/router'; 

const routes: Routes = [ 
    { 
    path: 'foo', 
    redirectTo: 'bar', 
    pathMatch: 'full' 
    } 
]; 

@NgModule({ 
    imports: [RouterModule.forChild(routes)], 
    exports: [RouterModule], 
    providers: [] 
}) 
export class FooRoutingModule { } 

现在,我要换重定向使它取决于一个路由参数(可能会有比这个更多的参数)。所以,foo?para=0应该重定向到barA,而foo?para=1应该重定向到barB。达到此目的最简单的方法是什么?

回答

1

您可以使用Guards来操纵路由。

在你的情况下,CanActivate警卫应该很好地完成这项工作。在此处阅读更多关于它们的信息:https://angular.io/guide/router#canactivate-requiring-authentication

@Injectable() 
export class MyGuard implements CanActivate { 

    constructor(public router: Router) {} 

    canActivate(route: ActivatedRouteSnapshot) { 
    switch(route.queryParams['para']) { 
    case '0' : 
     this.router.navigate(['my/url]); 
     break; 
    case '1': 
      .... 
    } 
    return false; 
    } 
} 

“return false;”在你的路由中非常重要,这样当前的导航(在你的情况下为'foo')被取消。

而在你的路由

const routes: Routes = [ 
    { 
    path: 'foo', canActivate:[ MyGuard ] 
    } 
]; 
+0

这是行不通的。在路由定义中,您需要组件或重定向。由于重定向无法保护,我需要引入一个空的假组件,这不是一个好的解决方案。 –

+0

请阅读本文作者路易斯安那V3路由器V3关于组件路由更少的文章http://vsavkin.tumblr.com/post/146722301646/angular-router-empty-paths-componentless-routes –

+0

伟大的文章!我找到了解决方案,我会编辑你的答案。 –