2017-08-25 81 views
2

我想重定向到另一個路徑的路徑的路徑:角2:重定向與參數和可選參數

/富/酒吧/ 123 schould重定向到/棒/ 123;模式=測試

我配置通過以下方式的路徑:

{ path: 'foo/bar/:id', redirectTo: '/bar/:id;mode=test' },

當它被重定向時,;mode=test部分缺失的目標URL。我怎樣才能包括這個?

回答

0

角度路由器基本上查看路徑對象並創建應用程序的基本路線集(不帶可選參數)。如果它們完全匹配路徑,那麼它將用於識別路線。所以可選參數不能在它們內部使用,因爲它們是「可選的」。並且在這些路徑對象中包含任何路由參數的唯一方法是使用':something'語法將它們綁定到url中,然後這些語法不會是可選的。 我認爲你有一些其他的方式來覆蓋這需要你的的:

加入你的「模式」參數設置爲你的基本路線: 你可以定義一個路徑是這樣的:{ path:'/bar/:id/:mode', component: BarComponent }並更改爲{ path: 'foo/bar/:id', redirectTo: '/bar/:id/test' }

您的重定向路徑使用

代理組件: 變化重定向路徑:{ path: 'foo/bar/:id', component: BarProxyComponent },並定義像這樣的部件:

export class BarProxyComponent { 
    constructor(private _router: Router, private _route: ActivatedRoute){ 
     _router.navigate(['/bar/'+_route.snapshot.params['id'],{mode: 'test'}]); 
    } 
} 

使用canActivate Guard:你也可以爲你的'foo'路徑創建一個守衛服務,守衛內部將它重定向到你想要的路線。然而,這並不是這些警衛背後的真正意圖,而只是利用他們來解決這個問題。 可以重定向路徑更改爲{ path: 'foo/bar/:id', component: UnusedFooComponent, canActivate: [FooGuard]}和界定保護這樣的:

@Injectable() 
export class FooGuard implements CanActivate { 

constructor(private _router: Router){} 
    canActivate(route: ActivatedRouteSnapshot) { 
     this._router.navigate(['/bar/'+route.params['id'],{mode: 'test'}]); 
     return false; 
    } 
} 

也不要忘記在模塊級提供FooGuard。 並注意在這裏,在創建UnusedFooComponent之前,您總是將其重定向到另一個地方(並返回false)...