2015-12-23 4 views
2

Я хотел бы выделить текущий активное подключениеповедения маршрутизатора Ссылка сломано Angular2 беты

<a [routerLink]="['/route']" /> 

После рендеринга я получаю <a> тег с правильной ссылкой, которая работает хорошо.

Но также есть дополнительное поведение в этих Директивах, которые должны добавить маршрутизатор-канальный активный класса к якорю в случае HREF таким же, как текущее местоположение.

Проблема в том, что это не работает.

get isRouteActive(): { 
    return this._router.isRouteActive(this._navigationInstruction); 
} 

Внутри _router.IsRouteractive есть текущее поле инструкции, которая должна содержать текущие компоненты маршрута. И этот компонент сравнивается с __navigationInstruction. На самом деле, если компоненты маршрута равны - связь является текущей.

Проблема в том, что текущая инструкция null. Он присваивается в:

Router.prototype.commit = function(...) 

Эта функция вызывается после обработки Директивы.

Так что это никогда не должно работать хорошо.

ответ

1

я делал что-то вроде этого:

<li [class.active]="somethingThatReturnsTrueOrFalse()"><a [routerLink]="['/About']" class="link">About</a></li> 

Это, кажется, работает хорошо для моего основного меню здесь: http://www.syntaxsuccess.com/angular-2-samples/#/demo/spreadsheet

+0

спасибо. но моя проблема не в [class.active], а в «router-link-active». В вашем примере вы автоматически получаете этот класс в файле ang2.beta-0. И я не получаю его – deeptowncitizen

+0

Хм .. Интересно. Мой образец также использует бета-0 – TGH

+0

да, я вижу. поэтому это более интересно и довольно странно. Я отлаживал это. но я использую TypeScript.и компиляция из TS: https://github.com/deeptowncitizen/currency-fetcher – deeptowncitizen

1

Не уверен, если это помогает вашей проблеме с возможным разбитым поведением маршрутизатора но this plunker имеет хорошее решение для отметки других элементов с изменениями маршрутизатора (например, родительский ли). Плункер включает в себя директиву: LinkActiveDirective.ts (использование можно увидеть в Users.ts)

Директива перехватывает [linkActive] и слушает изменения маршрутизатора. Когда ссылка маршрутизатора активна, класс становится активным в элементе.

Использования как это:

<li linkActive> 
    <a [routerLink]="['./Home']">Home</a> 
</li> 

Надеется, что это помогает.

+0

спасибо для вашего примера. насколько я вижу там множество примеров для Angular2 Beta, которые хорошо работают. И главное отличие состоит в том, что все эти примеры используют CDN JS Angular reference. И я использую webpack + TS + CommonJS. Попытка воспроизвести такое же поведение с CDN – deeptowncitizen

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