Класс Angular Routing routerLinkActive не удаляется с базовой страницы даже при другой маршрутизации ссылок

1

Я предоставляю простой пример маршрутизации, который хорошо работает. Единственная проблема заключается в том, что routerLinkActive добавляет класс "baboossa" в зависимости от того, какая ссылка активна. Когда я перехожу из дома к другим ссылкам как "около" или "окна", ссылка становится оранжевой (из-за класса бабуосса), но я все еще вижу, что дома тоже оранжевый. Почему теперь у меня есть 2 ссылки с добавленными классами из routerLinkActive, и класс не удаляется из дома?

app.component.html

<ul>
  <li><a [routerLink]="''" routerLinkActive="baboossa">Home</a></li>
  <li><a [routerLink]="'/about'" routerLinkActive="baboossa">About</a></li>
  <li><a [routerLink]="'/window'" routerLinkActive="baboossa">Window</a></li>
</ul>

<router-outlet></router-outlet>

app.module.ts

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

imports: [
  RouterModule.forRoot([
    {path:'', component: HomeComponent},
    {path:'about', component: AboutComponent},
    {path:'window', component:WindowComponent}
  ])
]

styles.css

.baboossa {background:orange;}

Результаты:

Изображение 174551 Изображение 174551 Изображение 174551

Может кто-то указать на проблему, почему я получаю 2 оранжевых фона на других активных ссылках, чем baseone (home)?

Изображение 174551

  • 0
    {path:'', component: HomeComponent} должен быть {path:'', component: HomeComponent, pathMatch: 'full' }
  • 0
    попробовал, не сработало. Тот же результат.
Показать ещё 2 комментария
Теги:
angular
angular-routing

3 ответа

2
Лучший ответ

Вы можете архивировать двумя способами:

  1. Добавьте routerLinkActiveOptions [routerLinkActiveOptions]="{ exact: true }" с помощью routerLinkActive.

Например: [routerLink]="''" [routerLinkActive]="['baboossa']" [routerLinkActiveOptions]="{ exact: true }".

  1. Перенаправляйте пустые path: '' маршрутизатора path: '' на любой конкретный путь, например '{path:' ', redirectTo:' home '} в вашем модуле маршрутизатора.

Как это:

[{
    path: '',    
    pathMatch : 'full',
    redirectTo: 'home'
},
{
    path: 'home',    
    component: HomeComponent
}]

и измените [routerLink]="''" на [routerLink]="'home'".

Вот Stackblitz

  • 1
    Более подробная информация об этом подходе находится в Angular Guide .
1

Я думаю, вы можете проверить ссылку ниже

https://stackblitz.com/edit/angular-router-basic-example-jufxu8?file=app/app.routing.module.ts

Для большей угловой маршрутизации

0

Здесь другой способ сделать это с именованным путем по умолчанию вместо пустого. Подход RESTful API, при котором URL легко понять.

<ul>
  <li><a [routerLink]="[ 'home' ]" routerLinkActive="baboossa">Home</a></li>
  <li><a [routerLink]="[ 'about' ]" routerLinkActive="baboossa">About</a></li>
  <li><a [routerLink]="'[ 'window' ]" routerLinkActive="baboossa">Window</a></li>
</ul>

<router-outlet></router-outlet>

А потом

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

imports: [
  RouterModule.forRoot([
    {path:'home', component: HomeComponent},
    {path:'about', component: AboutComponent},
    {path:'window', component:WindowComponent}
    {path:'**', redirectTo: 'home'}
  ])
]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню