2

Я использую AngularJS 2 для создания приложения SPA. Я пытаюсь добавить класс к кнопке для активного пути. Согласно Angular 2's router documentation, я должен использовать директиву RouterLinkActive для добавления класса. Однако, когда я делаю это, я получаю ошибку Cannot read property 'root' of undefined. Приложение отлично работает, если я удалю routerLinkActive="active" из шаблона. Коднеопределенная ошибка root при использовании routerLinkeActive in Angular 2

Маршрутизатор:

export const routes: RouterConfig = [ 
    {path : '', redirectTo: 'home', pathMatch: 'full'}, 
    {path : 'home', component : HomeComponent} 
    {path : 'item', component : ItemListComponent} 
    {path : 'item/:id', component : ItemComponent}, 
]; 

export const APP_ROUTER_PROVIDERS = [ 
    provideRouter(routes) 
]; 

HTML код шаблона:

<button [routerLink]="['home']" class="btn btn-block" routerLinkActive="active">Home</button> 
<button [routerLink]="['item']" class="btn btn-block">Items</button> 

Компонент Код:

@Component({ 
    selector: 'home-page', 
    directives: [ROUTER_DIRECTIVES], 
    precompile: [HomeComponent, ItemListComponent], 
    templateUrl: `app/templates/main-page.template.html` 
}) 
export class HomePageComponent { } 

Ошибка:

EXCEPTION: Error in app/templates/main-page.template.html:15:8 
ORIGINAL EXCEPTION: TypeError: Cannot read property 'root' of undefined 

Что такое корень и где его определить?

ответ

4

Неопределенное корень ошибки является ошибка в текущей версии angular2 (2.0.0-rc.4), что не позволяет routeLink быть использованы с неядерными тегами, если присутствует routerLinkActive. Проблема кажется фиксированной в мастер-классе (см.: https://github.com/angular/angular/issues/9755)

Для текущей версии вам нужно будет обернуть кнопку вокруг якорной метки. Он должен выглядеть примерно так:

<a routerLink="/home" routerLinkActive="active"> 
    <button class="btn btn-block" >Home</button> 
</a> 

<a routerLink="/item"> 
    <button class="btn btn-block">Items</button> 
</a> 
+0

@ Не знаю это! Завершил мой ответ! – Fals

2

routeLink Неправильный элемент кнопки. Должно выглядеть как здесь:

<button [routerLink]="home" class="btn btn-block" routerLinkActive="active">Home</button> 

Ссылка: RouterLinkActive

+0

Я сменил код кнопки на тот, который вы упомянули. Однако теперь я получаю следующий парсер ошибок: 'EXCEPTION: ошибки синтаксического анализа шаблона: ошибка Parser: неожиданный токен/в столбце 1 в [/ home] в HomeComponent @ 15: 16 (« <кнопка [ERROR ->] [routerLink ] = "/ home" class = "btn btn-block" routerLinkActive = "active"> Главная ")' –

+0

@FarshadMomtaz, потому что ваш маршрут является только «домом», а не «/ home», я пропустил его. – Fals

+0

Удаление косой черты приведет к такой же неопределенной ошибке root. Однако, если я удалю 'routerLinkActive =" active "' из кнопки, которую загрузит страница, но нажатие на кнопку приведет к следующей ошибке: 'TypeError: Не удается прочитать свойство 'toString' неопределенного' –

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