通过路由器路径

时间:2018-01-24 09:31:49

标签: angular typescript

我有一个父组件,它在HTML中保存一个导航元素,并根据选择的链接显示不同的组件,例如

<nav>
    <a routerLink="/hello">Hello</a>
    <a routerLink="/world">World</a>
</nav>
<router-outlet></router-outlet>

现在,我想更改所选导航链接的样式。所以我在TypeScript文件中声明了一个变量并使用&#34; hello&#34;初始化它,因为这是在应用程序开始时加载的路径:

selected: string = 'hello';

和方法:

setSelected(selected: string): void {
    this.selected = selected;
}

并将导航更改为:

<nav>
     <a routerLink="/hello" [class.selected]="selected == 'hello'" 
         (click)="setSelected('hello');">Hello</a>
     <a routerLink="/world" [class.selected]="selected == 'world'"
         (click)="setSelected('wolrd');">World</a>
</nav>

在CSS工作表中,我声明了所选类的样式。

到目前为止,这工作得很好,而不是一个问题: 如果我在/ world-path重新加载页面,那么&#34; Hello&#34; -link的样式为选中,因为该变量再次初始化,但router-outlet仍然显示/world的内容。 p>

有没有办法,通过使用当前路由器路径而不是点击事件来改变样式,还是有完全不同的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

您应该使用名为RouterLinkActive的build in指令,该指令根据当前活动路由设置css类。

像这样使用:

<nav>
  <a routerLink="/hello" routerLinkActive="selected">Hello</a>
  <a routerLink="/world" routerLinkActive="selected">World</a>
</nav>