Angular 2 routerlink с несколькими маршрутами?

Я хочу удалить класс только одним ОДНЫМ маршрутом (или добавить класс на все НО одним маршрутом.) Как это возможно? Я попытался [routerLink] с несколькими параметрами, но безрезультатно:

 <div class='body-content' [routerLink]="['/fetch-data', '/counter']" [routerLinkActive]="['col-sm-9']"  > 
        <router-outlet></router-outlet>
    </div>

Или есть такая вещь, как [routerLinkNOTActive] или что-то подобное:

<div class='body-content' [routerLink]="['/home']" [routerLinkNotActive]="['col-sm-9']"> 

поэтому он добавил бы класс 'col-sm-9' на все маршруты, которые не являются "/ home". Кажется очень простым, но не могу найти ничего, чтобы сделать это.

2 ответа

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

В вашем шаблоне

<div class='body-content' [routerLink]="['/fetch-data', '/counter']" [class]="bodyContentClass()"> 

И в вашем компоненте

bodyContentClass() {
  // router  is an instance of Router, injected in the constructor
  return this.router.isActive('/url-to-make-body-active') || this.router.isActive('/other-url-to-make-body-active') ? 'col-sm-9' : '';
}

Вы можете повеселиться и протестировать любую комбинацию маршрутов, которую пожелаете.

Вот мое окончательное решение, которое только что использовало атрибут [class]. Кстати, что случилось с атрибутом [ng-class] в Angular2?:

HTML:

<div class='body-content' [class]="bodyContentClass()" > 
    <router-outlet></router-outlet>
</div>

Машинопись:

import {Location} from '@angular/common';
...
constructor(private authService: AuthService,private location: Location) { }
...
bodyContentClass()
{
    // router  is an instance of Router, injected in the constructor
   var viewLocation = location.pathname; 
   return viewLocation == '/counter' || viewLocation == '/fetch-data' ? 'col-sm-9' : '';
}
Другие вопросы по тегам