我想重定向到另一個路徑的路徑的路徑:角2:重定向與參數和可選參數
/富/酒吧/ 123 schould重定向到/棒/ 123;模式=測試
我配置通過以下方式的路徑:
{ path: 'foo/bar/:id', redirectTo: '/bar/:id;mode=test' },
當它被重定向時,;mode=test
部分缺失的目標URL。我怎樣才能包括這個?
我想重定向到另一個路徑的路徑的路徑:角2:重定向與參數和可選參數
/富/酒吧/ 123 schould重定向到/棒/ 123;模式=測試
我配置通過以下方式的路徑:
{ path: 'foo/bar/:id', redirectTo: '/bar/:id;mode=test' },
當它被重定向時,;mode=test
部分缺失的目標URL。我怎樣才能包括這個?
角度路由器基本上查看路徑對象並創建應用程序的基本路線集(不帶可選參數)。如果它們完全匹配路徑,那麼它將用於識別路線。所以可選參數不能在它們內部使用,因爲它們是「可選的」。並且在這些路徑對象中包含任何路由參數的唯一方法是使用':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)...