我设法做到了这一点(如果有人能告诉我如何删除 Array 循环,那就太好了):
custom-route.interface.ts -- 这是为我们的路由对象添加名称
export interface ICustomRoute extends Route {
name?: string;
}
在 routing.module.ts 中(或您存储路线的任何地方):
const routes: ICustomRoute[] = [
{ path: 'some/random/page1', component: TestComponent, name: 'page1' },
{ path: 'some/random/page2', component: Test2Component, name: 'page2' },
{ path: 'page3', component: Test3Component, name: 'page3' },
];
现在名称正在传递到您的路由模块,所以现在您必须捕获名称并处理它。你可以通过多种方式做到这一点,我最终使用了一个指令(我看到@Safron 也提到了一个管道)
named-routerlink.directive.ts
@Directive({
selector: 'a[namedRouterLink]'
})
export class NamedRouterLinkDirective extends RouterLinkWithHref{
@Input('namedRouterLink')
set namedRouterLink(val: any) {
const selectedRoute = this.myRoute.config.filter( x => x['name'] == val)[0];
this.routerLink = "/" + selectedRoute['path']
};
constructor(router: Router, route: ActivatedRoute, locationStrategy: LocationStrategy, private myRoute: Router){
super(router, route, locationStrategy)
}
}
然后显然是这样使用的:
<a namedRouterLink="page1">Page 1</a>
管道版本:
@Pipe({name: 'getRoute' })
export class RoutePipe implements PipeTransform {
constructor(private router: Router){}
transform(routeName: string): string {
const selectedRoute = this.router.config.filter( x => x['name'] == routeName)[0];
return "/" + selectedRoute['path']
}
}
管道示例:
<a namedRouterLink="{{ 'page1' | getRoute }}">Page 1</a>