Я могу получить текущий маршрут маршрута, например:/about,/,/news с помощью location.path(). Но как я могу получить вместо него свой псевдоним ( "как" в определении маршрута)?
{ path: '/about', as: 'About', component: About }
Возможно ли это?
Я могу получить текущий маршрут маршрута, например:/about,/,/news с помощью location.path(). Но как я могу получить вместо него свой псевдоним ( "как" в определении маршрута)?
{ path: '/about', as: 'About', component: About }
Возможно ли это?
ПРИМЕЧАНИЕ. Следующее тестирование было протестировано в версии 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);
}
}
Невозможно увидеть способ его получения, но одним из вариантов является использование RouteData для передачи псевдонима маршрута
https://angular.io/docs/ts/latest/api/router/RouteData-class.html
Вы не должны использовать местоположение, вместо этого вы должны использовать экземпляр Router.
В своем компоненте вставьте его в конструктор с помощью
constructor(public router: Router)
чем, вы могли бы получить имя компонента с помощью:
this.router.currentInstruction.component.routeName
Я не уверен, как вы получите как из конфигурации маршрутизатора. Но директива RouterLink должна быть правильной для начала: https://angular.io/docs/ts/latest/api/router/RouterLink-directive.html
Для >= 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());
});
}
Если вам известен список возможных псевдонимов, тогда можно узнать имя текущего псевдонима, используя комбинацию 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}`);
}
Отказ от ответственности: я не пытался проверить, работает ли это с параметрами маршрута.