我能够获得当前路线的路径,例如:/ about,/,/ news with location.path()。 但是我怎样才能得到它的别名('作为路线定义中的'部分)?
{ path: '/about', as: 'About', component: About }
有可能吗?
答案 0 :(得分:3)
注意:以下内容已经过2.0 beta系列测试。 RC版本具有更新的路由器组件,具有重大变化。旧的已重命名为router-deprecated
。尚未对新路由器进行测试。
以下内容将根据您的有效路线打印Foo
或Bar
。
@Component({
selector: 'app',
templateUrl: 'app/app.html',
directives: [ROUTER_DIRECTIVES]
})
@RouteConfig([
{path:'/', name: 'Foo', component: FooComponent, useAsDefault: true},
{path:'/bar', name: 'Bar', component: BarComponent, useAsDefault: false},
])
export class AppComponent implements OnInit {
constructor(private _router: Router) {
}
ngOnInit() {
console.log('current route name',
this._router.currentInstruction.component.routeName);
}
}
答案 1 :(得分:2)
无法找到获取它的方法,但另一种方法是使用RouteData传递路径的别名
https://angular.io/docs/ts/latest/api/router/RouteData-class.html
答案 2 :(得分:2)
您不应该使用位置,而应使用路由器实例。
在您的组件中,将其注入构造函数中:
constructor(public router: Router)
,你可以获得组件的名称:
this.router.currentInstruction.component.routeName
我不确定您是如何从路由器配置获得 as 的。但是,RouterLink指令应该是正确的开始: https://angular.io/docs/ts/latest/api/router/RouterLink-directive.html
答案 3 :(得分:1)
对于> = Angular2 RC.x(新路由器)
新路由器中不再有别名。
您可以获取本地组件的相对路径
routerOnActivate(curr:RouteSegment, prev?:RouteSegment, currTree?:RouteTree, prevTree?:RouteTree):void {
console.log(curr.stringifiedUrlSegments);
}
或使用
的完整路径constructor(private router:Router) {}
routerOnActivate(curr:RouteSegment, prev?:RouteSegment, currTree?:RouteTree, prevTree?:RouteTree):void {
console.log(this.router.serializeUrl(tree));
}
或
constructor(router:Router, private location:Location) {
router.changes.subscribe(() => {
console.log(this.location.path());
});
}
答案 4 :(得分:0)
如果您知道可能的别名列表,那么可以使用router.generate
和route.isActiveRoute
的组合找出当前别名的名称:
例如,我有一个包含三个步骤的向导。我有一个数组中的步骤别名列表:
private wizardAliases = [
'wizardStep1',
'wizardStep2',
'wizardStep3'
];
然后我使用以下代码确定当前别名:
const alias = this.wizardAliases
.map(alias => ({ alias, navigationInstruction: this.router.generate([alias]) }))
.filter(x => this.router.isRouteActive(x.navigationInstruction))
.map(x => x.alias);
if (alias.length === 1) {
console.log(`alias is ${alias}`);
}
免责声明:我还没有尝试过查看这是否适用于路线参数。