【问题标题】:Angular routerLinkActive not working as expectedAngular routerLinkActive 未按预期工作
【发布时间】:2019-04-15 02:58:24
【问题描述】:

我正在做一个相当简单的项目,但这个问题让我很困惑!

除了 routerLinkActive 没有保持激活的一个小问题外,我已经设置了路由并且工作正常。

我还不能在问题中嵌入图片,所以请点击链接查看我得到的结果

Routing Results

当我转到:http://localhost:4200/1 时,“1”菜单项在导航栏中正确显示为活动状态。如果我随后转到子路线:http://localhost:4200/1/top100 '1' 菜单仍保持设置为活动状态。这正是我希望它工作的方式。

但是,在非常相似的设置中,我将“4”菜单项转到:http://localhost:4200/2/A。这正确地将顶部导航栏中的“4”显示为活动状态,并将“测试 A”按钮显示为活动状态。但是当我转到http://localhost:4200/2/B 时,“测试 B”按钮正确显示为活动状态,但主导航栏在“4”上丢失了活动标志。

下面附上代码sn-ps:

导航栏

<ul class="navbar-nav">
  <li class="nav-item" routerLinkActive="active">
    <a class="nav-link" routerLink="/1">1</a>
  </li>
  <li class="nav-item" routerLinkActive="active">
    <a class="nav-link" [routerLink]="['/notUsed', 'notUsed']">2</a>
  </li>
  <li class="nav-item" routerLinkActive="active">
    <a class="nav-link" [routerLink]="['/notUsed', 'notUsed']">3</a>
  </li>
  <li class="nav-item" routerLinkActive="active">
    <a class="nav-link" [routerLink]="['/2', 'A']">4</a>
  </li>
  <li class="nav-item" routerLinkActive="active">
    <a class="nav-link" routerLink="/notUsed">5</a>
  </li>
</ul>

按钮组

<div class="btn-group-vertical fixedWidthButtonHonour mb-3" role="group" aria-label="Senior Grades">
  <button type="button" class="btn btn btn-outline-danger" [routerLink]="['/2', 'A']" routerLinkActive="active">Test A</button>
  <button type="button" class="btn btn btn-outline-danger" [routerLink]="['/2', 'B']" routerLinkActive="active">Test B</button>
</div>

路线

const appRoutes: Routes = [
  { path: '', component: HomeComponent, pathMatch: 'full' },
  { path: '1', component: Component1 },
  { path: '1/top100/:name', component: ComponentTop100 },
  { path: '2', component: Component2 },
  { path: '2/:viewType', component: Component2 },
  { path: '**', redirectTo: '/', pathMatch: 'full' }
];

我无法弄清楚这两个示例之间的区别。如果有人有任何实现我所追求的见解或工作演示,那就太好了。

谢谢 大卫

【问题讨论】:

    标签: angular angular-routing routerlinkactive


    【解决方案1】:

    问题是您希望['/2', 'A'] 上的routerLinkActive 在您位于['/2', 'B'] 时变得活跃。这不是它的工作方式。您应该在/2 链接上创建routerLinkActive

    如果您不介意总是将/2 重定向到/2/A,您可以执行以下操作:

    在您的导航栏中:

    <li class="nav-item" routerLinkActive="active">
      <a class="nav-link" routerLink="/2">4</a>
    </li>
    

    在您的应用程序路由中

    const appRoutes: Routes = [
      { path: '', component: HomeComponent, pathMatch: 'full' },
      { path: '1', component: Component1 },
      { path: '1/top100/:name', component: ComponentTop100 },
      { path: '2', redirectTo: '2/A', pathMatch: 'full' },
      { path: '2/:viewType', component: Component2 },
      { path: '**', redirectTo: '/', pathMatch: 'full' }
    ];
    

    另一种解决方案可能是根据您当前的路由器路径手动添加[class.active]

    【讨论】:

    • 谢谢!出色的答案并解决了我的问题。我没想过使用重定向 - 好简单的建议。
    猜你喜欢
    • 2020-02-19
    • 2018-08-24
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多