Angular2 получить текущий псевдоним маршрута

Я могу получить текущий маршрут маршрута, например:/about,/,/news с помощью location.path(). Но как я могу получить вместо него свой псевдоним ( "как" в определении маршрута)?

{ path: '/about', as: 'About', component: About }

Возможно ли это?

Ответ 1

ПРИМЕЧАНИЕ. Следующее тестирование было протестировано в версии 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);
    }
}

Ответ 3

Вы не должны использовать местоположение, вместо этого вы должны использовать экземпляр Router.

В своем компоненте вставьте его в конструктор с помощью

constructor(public router: Router)

чем, вы могли бы получить имя компонента с помощью:

this.router.currentInstruction.component.routeName

Я не уверен, как вы получите как из конфигурации маршрутизатора. Но директива RouterLink должна быть правильной для начала: https://angular.io/docs/ts/latest/api/router/RouterLink-directive.html

Ответ 4

Для >= 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());
  });
}

Ответ 5

Если вам известен список возможных псевдонимов, тогда можно узнать имя текущего псевдонима, используя комбинацию 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}`);
}

Отказ от ответственности: я не пытался проверить, работает ли это с параметрами маршрута.