【发布时间】:2017-12-02 01:56:11
【问题描述】:
在下面的示例路由配置中,我收到一个错误:无法重定向到“/ip/:id”。输入 localhost:8080\sso\ip\1 时找不到 ':id'。我试图了解如何使用路径的可变段进行重定向。在这种情况下 :id 似乎无法找到。我引用了https://vsavkin.com/angular-router-understanding-redirects-2826177761fc,它描述了一个类似的用例,其中在redirectTo 属性中使用了动态段。
id 是否使用启动的 /sso/ip/:id 路由中的 :id 参数解析?有人问过类似的问题,但从未回复:https://groups.google.com/forum/#!topic/angular/Mw0N3qYphO8。
非常感谢任何帮助?
const appRoutes: Routes = [
{
path: 'ip',
children: [
{
path: ':id',
children: [
{
path: 'tcv',
component: IpTcvComponent
},
{
path: '',
component: IpComponent
}
]
},
{
path: '',
component: IpHomeComponent
}
]
},
{
path: 'sso',
children: [
{
path: 'ip',
children: [
{
path: ':id',
children: [
{
path: 'tcv',
pathMatch: 'full',
redirectTo: '/ip/:id/tcv'
},
{
path: '',
pathMatch: 'full',
redirectTo: '/ip/:id'
}
]
},
{
path: '',
pathMatch: 'full',
redirectTo: '/ip'
}
]
}
]
}
];
【问题讨论】:
-
你能显示你用来重定向到这条路线的代码吗?
-
@DeborahK 我认为这一切都在路由配置中。当用户转到
/sso/ip/:id时,OP 希望使用与提供给原始路径的:id相同的值重定向到/ip/:id。然而,似乎路由器试图寻找文字路由/ip/:id(不替换 id 值),因为:id只是一个参数,所以该路由不存在 -
我假设有一个 routerLink 或 .navigate() 方法正在执行此操作。我希望看到该代码以了解该过程是如何完成的。或者可能被误解了......用户是否在地址栏中输入了路径?
-
@BettleJuice,你搞定了我想做的事。浏览器用于执行路由。我输入 localhost:8080/sso/ip/1 并期望被重定向到 localhost:8080/ip/1。仅使用路由配置,没有使用 Angular 路由器的 javascript。我正在整理一个示例应用程序,因为我的原始应用程序要大得多,并且会分散手头的问题。
-
@DeborahK。创建了一个 Plunker 来演示这个问题。如果单击 SSO IP 组件链接,则会将错误写入控制台。 Plunker