Angular 2/4 - routerLinkActive无法正常工作

时间:2017-09-12 09:28:32

标签: angular routerlink routerlinkactive

我的routerLinkActive有问题。

这是两个要解释的GIF。

  1. 第一个问题:当我启动应用程序时,routerLinkActive都没有激活该类。但如果我点击不同的路线,那最终会有效。
  2. enter image description here

    1. 当我首先点击当前路线时,该课程没有显示。
    2. enter image description here

      这是我的代码:

      <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>
      

      这是我路线的树。 (红色称为组件)

      enter image description here

      和我的路线代码:

      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: ''
      }]
      

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

      编辑:

      我试过了:

      绝对路线。即:

       path: '/home/dashboard'
      

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

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

      结果是一样的。不工作。

      EDIT2:

      添加:

      [routerLinkActiveOptions] =&#34; {exact:true}&#34;到:

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

      无法解决问题。

      EDIT3:

      扩展名Augury告诉我,routerLink对于良好的路线是正确的。但是这个类没有在DOM中激活。

      enter image description here

      enter image description here

      EDIT4:

      所以,我做了一些探索。

      我发现如果我将menuComponent(侧边栏)放在父根中,那就可以了,我会显示活动类(但我不想把它放在父级中

      Moving the menu to the parent works.

      EDIT5:

      我已经完成了这种情况的掠夺者......并且那个掠夺者工作......我不明白。

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

3 个答案:

答案 0 :(得分:8)

试试这个:

<li routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}">
    <a>Home</a>
</li>

答案 1 :(得分:8)

所以我花了很多时间来解决这个问题。

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

事情是:它适用于角度2但不是角度4。

我找到了角4的黑客攻击:

<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,错误消失了!

答案 2 :(得分:0)

看起来HomeComponent是懒惰加载的。您不必将路由移动到根组件。只是尝试将RouterModule添加到根组件。

更多here