24

我的 routerLinkActive 有问题。

这里有两个GIF来解释。

  1. 第一个问题:当我启动应用程序时,没有一个 routerLinkActive 让课程处于活动状态。但如果我点击不同的路线,那最终会奏效。

在此处输入图像描述

  1. 当我首先单击当前路线时,不显示课程。

在此处输入图像描述

这是我的代码:

<ul class="nav">
   <li *ngFor="let menuItem of menuItems" routerLinkActive="active" class="{{menuItem.class}}">
       <a [routerLink]="[menuItem.path]">
           <i class="material-icons">{{menuItem.icon}}</i>
           <p>{{menuItem.title}}</p>
       </a>
   </li>
</ul>

这是我的路线树。(红色是调用的组件)

在此处输入图像描述

和我的路线代码:

import ...

const routes : Routes = [
  {
    path: '',
    component: HomeComponent,
    canActivate: [AuthGuard],
    children: [
      {
        path: 'dashboard',
        component: DashboardComponent
      }, ..., {
        path: 'challenges',
        component: ImageRankComponent
      }, {
        path: 'niveau',
        component: LevelComponent
      }, {
        path: '',
        redirectTo: 'dashboard',
        pathMatch: 'full'
      }
    ]
  }
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  providers: [
    {
      provide: LocationStrategy,
      useClass: HashLocationStrategy
    }
  ],
  exports: [RouterModule]
})
export class HomeRoutingModule {}

和 menuItem 是:

this.menuItems = ROUTES.filter(menuItem => menuItem);
const ROUTES : RouteInfo[] = [{
    path: 'dashboard',
    title: 'Dashboard',
    icon: 'dashboard',
    class: ''
}, {
    path: 'challenges',
    title: 'Tous les challenges',
    icon: 'dashboard',
    class: ''
},
{
    path: 'niveau',
    title: 'Niveau en ligne',
    icon: 'dashboard',
    class: ''
}]

你知道我的问题是什么吗?

编辑:

我努力了:

绝对路线。IE:

 path: '/home/dashboard'

<a [routerLink]="menuItem.path">

<a [routerLink]="[menuItem.path]">

结果是一样的。不工作。

编辑2:

添加:

[routerLinkActiveOptions]="{exact: true}" 到:

<li *ngFor="let menuItem of menuItems" routerLinkActive="active" class="{{menuItem.class}} " [routerLinkActiveOptions]="{exact: true}">

不能解决问题。

编辑3:

扩展 Augury 告诉我 routerLink 对于好路由是正确的。但是该类未在 DOM 中激活。

在此处输入图像描述

在此处输入图像描述

编辑4:

所以,我做了一些探索。

我发现如果我将 menuComponent(侧边栏)放在父根目录中,那是有效的,我会显示活动类(但我不想把它放在父目录中)

将菜单移至父项有效。

编辑5:

我已经对这种情况做了一个检查......而且这个工作很有效......我不明白。

https://plnkr.co/edit/7KMlY2

4

3 回答 3

24

尝试这个 :

<li routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}">
    <a>Home</a>
</li>
于 2017-09-12T12:59:03.657 回答
12

所以我花了很多时间在这个问题上。

https://github.com/angular/angular/issues/19167

问题是:这适用于角度 2,但不适用于角度 4。

我找到了 angular 4 的 hack:

<li *ngFor="let menuItem of menuItems" [routerLinkActive]="" [ngClass]="rla.isActive?'active':''"  #rla="routerLinkActive"class="{{menuItem.class}}">
  <a [routerLink]="[menuItem.path]">
                <i class="material-icons">{{menuItem.icon}}</i>
                <p>{{menuItem.title}}</p>
            </a>
</li>

和:

[routerLinkActive]="" [ngClass]="rla.isActive?'active':''"  #rla="routerLinkActive"

编辑角度 5:

使用 Angular 5,错误消失了!

于 2017-09-13T07:57:38.560 回答
0

看起来 HomeComponent 是延迟加载的。您不必将路线移动到根组件。只需尝试将 RouterModule 添加到根组件。

更多在这里

于 2017-09-12T15:45:59.150 回答