Angular:基于活动路由器链接绑定模板变量的简洁方法
Angular: clean way to bind template var based on active routerlink
构建一个 Angular 4 应用程序,但我会接受也适用于 v5+ 的答案。我有一个由导航按钮组成的导航栏,如下所示:
<custom-button routerLink="/some-route"></custom-button>
我知道我可以根据当前路由是否与按钮的 routerLink
匹配,向元素添加自定义 class "active" :
<custom-button routerLink="/some-route" routerLinkActive="active"></custom-button>
但是我需要一种方法来根据此条件(路由是否为当前)绑定输入值,例如:
<custom-button routerLink="/some-route" [inputFlag]="isOnCurrentRoute">
</custom-button>
所以想法是,如果按钮的 routerLink
指的是当前路线,inputFlag
将设置为 true
。我知道这可以通过注入 ActivatedRoute
并构建一个函数来实现,该函数采用按钮的 routerLink
和 returns true
的值(如果它与当前路由匹配)。
<custom-button routerLink="/some-route"
[inputFlag]="isOnCurrentRoute('/some-route')">
</custom-button>
虽然开销很大;想知道 Angular 是否公开了一个 API 来完成模板中的所有操作
您可以像这样定义函数 isOnCurrentRoute
import { Router } from '@angular/router';
import { map, filter } from 'rxjs/operators';
constructor(private router: Router) {}
isOnCurrentRoute(path): Observable<boolean> {
return this.router.events.pipe(
filter(event => event instanceof NavigationEnd),
map(event => event.url === path)
);
}
并通过异步管道在您的模板上使用它
<custom-button routerLink="/some-route"
[inputFlag]="isOnCurrentRoute('/some-route') | async">
</custom-button>
希望对您有所帮助
所以我一直在考虑它,如果 Angular 确实有一个功能可以做你正在寻找的 routerLinkActive
属性结合 routerLink
我们可以用它来破解通过检查由 routerLinkActive
.
分配的 class 名称,仅在模板本身中没有 JS/TS 代码
解决方案:
<custom-button #customBtn
routerLink="/some-route"
routerLinkActive="active"
[inputFlag]="customBtn.classList.contains('active')"
></custom-button>
构建一个 Angular 4 应用程序,但我会接受也适用于 v5+ 的答案。我有一个由导航按钮组成的导航栏,如下所示:
<custom-button routerLink="/some-route"></custom-button>
我知道我可以根据当前路由是否与按钮的 routerLink
匹配,向元素添加自定义 class "active" :
<custom-button routerLink="/some-route" routerLinkActive="active"></custom-button>
但是我需要一种方法来根据此条件(路由是否为当前)绑定输入值,例如:
<custom-button routerLink="/some-route" [inputFlag]="isOnCurrentRoute">
</custom-button>
所以想法是,如果按钮的 routerLink
指的是当前路线,inputFlag
将设置为 true
。我知道这可以通过注入 ActivatedRoute
并构建一个函数来实现,该函数采用按钮的 routerLink
和 returns true
的值(如果它与当前路由匹配)。
<custom-button routerLink="/some-route"
[inputFlag]="isOnCurrentRoute('/some-route')">
</custom-button>
虽然开销很大;想知道 Angular 是否公开了一个 API 来完成模板中的所有操作
您可以像这样定义函数 isOnCurrentRoute
import { Router } from '@angular/router';
import { map, filter } from 'rxjs/operators';
constructor(private router: Router) {}
isOnCurrentRoute(path): Observable<boolean> {
return this.router.events.pipe(
filter(event => event instanceof NavigationEnd),
map(event => event.url === path)
);
}
并通过异步管道在您的模板上使用它
<custom-button routerLink="/some-route"
[inputFlag]="isOnCurrentRoute('/some-route') | async">
</custom-button>
希望对您有所帮助
所以我一直在考虑它,如果 Angular 确实有一个功能可以做你正在寻找的 routerLinkActive
属性结合 routerLink
我们可以用它来破解通过检查由 routerLinkActive
.
解决方案:
<custom-button #customBtn
routerLink="/some-route"
routerLinkActive="active"
[inputFlag]="customBtn.classList.contains('active')"
></custom-button>