13

我在 Angular 中有一个问题:我有三个链接,其中一个有查询参数(由于使用了解析器)。如果我单击第一个和第三个链接,routerLinkActive则设置为。如果我点击第二个链接routerLinkActive也设置了。但是,如果我更改组件内的查询参数,则会routerLinkActive取消设置。

所以,我需要忽略查询参数。但它是如何工作的?谁能帮我?

这是我的简单代码:

<div class="col-12">
    <ul class="nav nav-pills nav-justified">
        <li class="nav-item">
            <a 
              class="nav-link" 
              routerLink="/einstellungen/allgemein"                             
              routerLinkActive="active">
              Allgemein
            </a>
        </li>
        <li class="nav-item">
            <a 
              class="nav-link" 
              [routerLink]="['/einstellungen/kalender']" 
              [queryParams]="{branch: myBranches[0].id}" 
              routerLinkActive="active"
              [routerLinkActiveOptions]="{exact: false}">
              Kalender verwalten
           </a>
        </li>
        <li class="nav-item">
            <a 
              class="nav-link" 
              *ngIf="user.is_admin" 
              routerLink="/einstellungen/filialen" 
              routerLinkActive="active">
              Filialen verwalten
            </a>
        </li>
    </ul>
</div>
4

3 回答 3

16

RouteLinkActive 仅适用于精确的查询参数。您可以尝试将 {exact: false} 作为 routerLinkActiveOptions 传递。如果这不起作用

您可以在 [class.active] 属性中调用函数。

<a class="nav-link" [routerLink]="['/einstellungen/kalender']" [queryParams]="{branch: myBranches[0].id}" [class.active]="isLinkActive('/my-link')">Kalender verwalten</a>

isLinkActive(url): boolean {
   const queryParamsIndex = this.router.url.indexOf('?');
   const baseUrl = queryParamsIndex === -1 ? this.router.url : 
   this.router.url.slice(0, queryParamsIndex);
   return baseUrl === url;
}
于 2018-08-27T11:18:53.223 回答
0

使用隐藏的锚标记和 html 模板变量:

<a [routerLink]="/einstellungen/kalender" routerLinkActive="" #rla="routerLinkActive" hidden></a>
<a 
   class="nav-link" 
   [routerLink]="['/einstellungen/kalender']" 
   [queryParams]="{branch: myBranches[0].id}" 
   [class.active]="rla.isActive">
   Kalender verwalten
 </a>
于 2019-02-22T14:23:23.243 回答
0

component.ts 中:

withoutQueryParams$: Observable<boolean>;

ngOnInit() {
    this.withoutQueryParams$ = this.route.queryParams.pipe(
        map(params => Object.keys(params).length === 0)
    );
}

template.html 中:

[routerLinkActiveOptions]="{ exact: withoutQueryParams$ | async }"
于 2021-08-26T20:22:55.940 回答