として
<ul class="nav navbar-nav">
<li [routerLinkActive]="['active']"> <a [routerLink]="['#'+sectionName]">One</a></li>
...
</ul>
そのレンダリングだけではなく、routerLink
ディレクティブを使用してのhref
属性に値をバインドします。
<a [href]="'#'+sectionName">One</a>
それとも、独自のディレクティブを構築することができます:
@Directive({
selector: 'a[anchorLink]'
})
export class AnchorLinkDirective {
@Input()
@HostBinding('attr.href')
public get anchorLink() {
return '#' + this.link;
}
public set anchorLink(value: string) {
this.link = value;
}
@Input()
public anchorLinkActive: string;
private link: string;
private ngUnsubscribe$ = new Subject();
constructor(private router: Router, private renderer: Renderer2, private element: ElementRef) {
this.router.events.takeUntil(this.ngUnsubscribe$).subscribe(e => {
if(e instanceof NavigationEnd) {
let parts = e.urlAfterRedirects.split('#');
let element = this.element.nativeElement as HTMLElement;
if(this.anchorLinkActive && parts[parts.length - 1] === this.link) {
this.renderer.addClass(element, this.anchorLinkActive);
} else if(element.classList.contains(this.anchorLinkActive)) {
this.renderer.removeClass(element, this.anchorLinkActive);
}
}
});
}
ngOnDestroy() {
this.ngUnsubscribe$.next();
this.ngUnsubscribe$.complete();
}
}
注:このディレクティブは、かなり基本的なものとanchorLinkActive
入力の変更をカバーしていません。
実は私もとしてクラスを設定したいですユーザが特定のセクションをクリックしてナビゲートして、 'routerLink'を使用しようとした理由です。 –
ああ、私は自分の答えを更新しました。 – cyrix