注意:这里有很多不同的答案,大多数答案一次或一次都有效。事实是,随着Angular团队更改了路由器,有效的方法已经改变了很多次。最终将成为Angular中的路由器的Router 3.0版本打破了许多这些解决方案,但提供了一个非常简单的解决方案。从RC.3开始,首选解决方案是使用此答案中所示的[routerLinkActive]

在Angular应用程序中(我写此书时是2.0.0-beta.0版本中的当前版本),您确定当前处于活动状态的路线是什么?

我正在开发一个使用Bootstrap 4的应用程序,并且需要一种方法来在显示其相关组件时将导航链接/按钮标记为活动状态。一个<router-output>标签。

我意识到,当单击其中一个按钮时,我可以自己维护状态,但是这不会涵盖将多条路径引入同一条路线的情况(例如导航菜单以及主要组件中的本地菜单。

任何建议或链接将不胜感激。谢谢。

#1 楼

使用新的Angular路由器,您可以将[routerLinkActive]="['your-class-name']"属性添加到所有链接: />
<a [routerLink]="['/home']" [routerLinkActive]="['is-active']">Home</a>


或更简单的格式(如果只需要一个类):有关更多信息。 (我主要是通过反复试验来解决这个问题。)

更新:现在可以在此处找到有关routerLinkActive指令的更好文档。 (感谢@Victor Hugo Arango A.在下面的评论中。)

#2 楼

我在另一个问题中回答了这个问题,但我相信它也可能与此问题相关。这是原始答案的链接:
角度2:如何使用参数确定活动路线?

我一直在尝试设置活动类,而不必确切知道当前位置(使用路线名称)。迄今为止,最好的解决方案是使用Router类中提供的isRouteActive函数。是否为当前路线。您可以使用router.isRouteActive(instruction): Boolean的generate(linkParams:Array)生成路由Instruction。 LinkParams遵循与传递到routerLink指令中的值完全相同的格式(例如true)。 :

@RouteConfig([
  { path: '/', component: HomePage, name: 'Home' },
  { path: '/signin', component: SignInPage, name: 'SignIn' },
  { path: '/profile/:username/feed', component: FeedPage, name: 'ProfileFeed' },
])


视图如下所示:

<li [class.active]="router.isRouteActive(router.generate(['/Home']))">
   <a [routerLink]="['/Home']">Home</a>
</li>
<li [class.active]="router.isRouteActive(router.generate(['/SignIn']))">
   <a [routerLink]="['/SignIn']">Sign In</a>
</li>
<li [class.active]="router.isRouteActive(router.generate(['/ProfileFeed', { username: user.username }]))">
    <a [routerLink]="['/ProfileFeed', { username: user.username }]">Feed</a>
</li>


这是我的首选解决方案到目前为止的问题,可能对您也有帮助。

评论


我认为此解决方案比公认的解决方案更好,因为它使用的是Angular API,而不是匹配路径的正则表达式。不过还是有点丑陋,只能够执行router.isRouteActive('Home')会很好。

–菲利普
16年1月7日在22:55

我在尝试实施该解决方案时遇到了一些问题,因此也许对某些问题很有用:stackoverflow.com/questions/35882998/…

– Nikita Vlasenko
16 Mar 9 '16 at 4:54

不应该忘记将Router放在类的构造函数中

– Nikita Vlasenko
16 Mar 9 '16 at 4:55

在最新的Angular 2版本中,我使用名称代替路由器配置对象中的name。

– ComFreek
16 Mar 24 '16 at 9:54

可以在rc1中使用它:router.urlTree.contains(router.createUrlTree(['Home']))

–FrantišekŽiačik
16年5月15日在11:23