2016-09-01 2 views
12

RouterLinkActive не работает при использовании динамически сгенерированной ссылки при навигации по самому приложению.RouterLinkActive для RouterLink с параметрами (/ dynamic)

например. в моей верхней навигации у меня это;

<a [routerLink]=['user', currentUser.name] routerLinkActive='active'>{{currentUser.name}}</a> 

Несмотря на то, что версия с жесткой кодировкой будет работать.

<a [routerLink]=['user','bob']>View Bobs Account</a> 

Плунж для этого здесь; https://plnkr.co/edit/BYKMucE3Y75uJSpV5VWx?p=preview

Нажмите «John» и «Dynamic Router Link Name =» и «John» должны быть активными. Это иногда срабатывает при первом щелчке, если это так, а затем нажмите «Домой», щелчок снова на «Джон», вы увидите, что только жесткосвязанная ссылка зарегистрирована как активная, хотя hrefs идентичны.

Является ли это разработанным или невозможным? или я устанавливаю что-то неправильно?

+0

Вы решили это? Кроме того, ваш punker падает, когда вы нажимаете на ссылки. – Pylinux

ответ

2

Изменить HTML, как показано ниже:

<a [routerLink]=['user', currentUser.name] routerLinkActive='active'>{{currentUser.name}}</a> 

Вы также можете проверить Why Angular2 routerLinkActive sets active class to multiple links?

+0

routerLinkActive vs [routerLinkActive], похоже, не влияет на результат. Также не беспокоился о том, что несколько ссылок активны, в этом случае все в порядке, они должны быть активными, а не только одним. – ct5845

+0

На самом деле [routerLinkActive] неправильный путь, он будет работать, но вызывать ошибку некоторое время. – ranakrunal9

15

В компоненте:

import {Router} from '@angular/router'; 

isActive(instruction: any[]): boolean { 
    // Set the second parameter to true if you want to require an exact match. 
    return this.router.isActive(this.router.createUrlTree(instruction), false); 
} 

В вашем HTML:

<a [class.active]="isActive(['user', currentUser.name])"> 

Router.isActive() documentation on angular.io

+2

Это должен быть принятый ответ. В то же время, почему routerLinkActive работает так? –

+2

Похоже, что router.isActive теперь требует второй логический параметр, указывающий, является ли совпадение точным или нет. –

1

routerLinkActive оценивается при начальной нагрузке и только при изменении маршрута. Он не переоценивается при изменении ссылки. Следовательно, динамически сгенерированная ссылка не работает с routerLinkActive. Решение Виктора Бредихина выше работает как функция компонента, оценивается во время рендеринга.

Смежные вопросы