我有动态路线可以在参数内包含斜杠或反斜杠,例如:
http://localhost:4200/dashboard/T64/27D
我应该导航到包含路线T64/27D
这是我的导航方式
this.router.navigate(['dashboard/'+this.groupListPage[0].code]);
this.groupList[0].code
包含T64/27D
实际上,Angular将T64
和27D
分隔为两个不同的页面。
这是错误:
ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'dashboard/T64/27D'
Error: Cannot match any routes. URL Segment: 'dashboard/T64/27D'
我如何告诉Angular /
是参数的一部分?
答案 0 :(得分:3)
我不认为可以通过路径选择来做到这一点。它完全适用于queryparams tho。
您也可以尝试使用%2F来转义斜杠,但我不能100%确定角度将采用/解析它。
答案 1 :(得分:2)
确定路线:
{
path: 'dashboard/:id',
component: FooComponent
}
并且:id可以存在于{' abc',' ab / c'}中,以便考虑内部' /'作为路径的一部分,您需要使用自定义UrlMatcher:
const customMatcher: UrlMatcher = (
segments: UrlSegment[],
group: UrlSegmentGroup,
route: Route
): UrlMatchResult => {
const { length } = segments;
const firstSegment = segments[0];
if (firstSegment.path === "dashboard" && length === 2 || length === 3) {
// candidate for match
const idSegments = segments
.slice(1); // skip prefix
const idPaths = idSegments.map(segment => segment.path);
const mergedId = idPaths.join('/');// merge the splitted Id back together
const idSegment: UrlSegment = new UrlSegment(mergedId, { id: mergedId });
return ({ consumed: segments, posParams: { id: idSegment } });
}
return null;
};
可以在此blitz
中找到一个工作示例答案 2 :(得分:1)
对于仍在寻找它的任何人,如果您的param
中有特殊字符,则可以通过以下方式使用navigate
方法:
this.router.navigate(['dashboard', param]);
这样,Angular会自动在param
中转义特殊字符
答案 3 :(得分:-2)
You must define it in your routes.
//if two param
{
path: 'dashboard/:id1/:id2',
component: yourComponent
}
//if only one param
{
path: 'dashboard/:id1',
component: yourComponent
}
{
path: 'dashboard',
component: yourComponent
}
and then navigate to your path
this.router.navigate(['dashboard/'+this.groupListPage[0].code]);