如何在Angular 6中将“ routerLinkActive”与查询参数一起使用?

Seb*_*n S 6 parameters routing routerlinkactive angular

我在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>
Run Code Online (Sandbox Code Playgroud)

Sur*_*iya 9

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以尝试将 `IsActiveMatchOptions` 对象输入到 `RouterLinkActive` (https://angular.io/api/router/RouterLinkActive#properties) 并调整 `queryParams: 'exact' | '子集' | '忽略'` - 希望它对某人有帮助 (2认同)