为什么我的重定向无法加载预期的组件?



我有一个Angular应用,在路由模块中有一个重定向来处理旧的url,但是这个重定向没有到达预期的路由,而是落到了通配符路由上。下面是该问题的一个简化示例:

const routes: Routes = [
{
path: 'old',
redirectTo: '..'
},
{
path: 'a',
component: AComponent
},
{
path: 'b',
component: BComponent
},
{ path: '**', component: PageNotFoundComponent, pathMatch: 'full' }
];

我希望/old/a重定向到/a,old/b重定向到/b。这是不可能的。

浏览器URL栏中的URL会被正确地重写,但是Angular会加载PageNotFoundComponent。如果我手动刷新页面,就会加载正确的组件。

我已经尝试启用路由跟踪,重写似乎如预期的那样应用:

NavigationEnd(id: 1, url: '/old/a', urlAfterRedirects: '/../a')

为什么重定向没有导致预期的组件被加载,我如何确保它会?

编辑:Stackblitz展示了这个问题:https://stackblitz.com/edit/angular-e1gt7c导航到old/a,注意URL被正确地重写为/a,但"页面未找到";消息显示,而不是"一个作品!">

使用参数:代替

{
path: 'old',
redirectTo: '..',
},

{
path: 'old/:child',
redirectTo: ':child',
},

https://stackblitz.com/edit/angular-e1gt7c-twawde?file=src%2Fapp%2Fapp-routing.module.ts

最新更新