如何在 Angular 6 中将 "routerLinkActive" 与查询参数一起使用?
How to use "routerLinkActive" with query params in Angular 6?
我在 Angular 中遇到问题:我有三个 link,其中一个有查询参数(由于使用了解析器)。如果我单击第一个和第三个 link,则会设置 routerLinkActive
。如果我点击第二个 link 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>
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;
}
使用隐藏的锚标记和 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>
在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 }"
我在 Angular 中遇到问题:我有三个 link,其中一个有查询参数(由于使用了解析器)。如果我单击第一个和第三个 link,则会设置 routerLinkActive
。如果我点击第二个 link 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>
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;
}
使用隐藏的锚标记和 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>
在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 }"