在标题中,我需要得到ElementRef的routerLinkActive,以了解我需要在哪里放置一个“墨水条”(例如材料设计标签)在正确的位置。
这是我的sideNav菜单
<mat-sidenav fxLayout='column'
fxLayoutAlign='start center'#sidenav
mode="over" [(opened)]="opened" position="end"
class="nav-sidenav">
<!-- Here the Navigation -->
<div class="nav-sidenav-container" fxFlex='1 1 100%'>
<div class="ink-bar"></div> <!-- I NEED TO MOVE THIS -->
<ul class="nav">
<li *ngFor="let menuItem of menuItems"
routerLinkActive="active" class="{{menuItem.class}}">
<a [routerLink]="[menuItem.path]">
<i class="nav-icon-container">
<mat-icon>{{menuItem.icon}}</mat-icon>
</i>
<p>{{menuItem.title}}</p>
</a>
</li>
</ul>
</div>
</mat-sidenav>第一个"li“元素位于180 li,元素之间的偏移量为60 li。但是,我需要知道在开头哪个是活动元素(例如,如果用户在浏览器中粘贴URL ),有一种方法可以获得ElementRef的activeLink
发布于 2018-04-18 15:31:19
您可以通过使用ElementRef选项使用ViewChildren和查询RouterLinkActive指令来找到read: ElementRef。
我们延迟了findActiveLink方法在setTimeout中的执行,以便RouterLinkActive有时间用适当的CSS类更新视图。
import { Component, ViewChildren, ElementRef, QueryList } from '@angular/core';
import { RouterLinkActive } from '@angular/router';
@Component({
selector: 'my-app',
template: `
<a [routerLinkActive]="activeClass" routerLink="/">Hello</a>
<a [routerLinkActive]="activeClass" routerLink="/hello">Hello</a>
<a [routerLinkActive]="activeClass" routerLink="/world">Hello</a>
<router-outlet></router-outlet>
`,
styleUrls: ['./app.component.css']
})
export class AppComponent {
activeClass = 'active';
@ViewChildren(RouterLinkActive, { read: ElementRef })
linkRefs: QueryList<ElementRef>
constructor() { }
ngAfterViewInit() {
setTimeout(() => {
const activeEl = this.findActiveLink();
console.log(activeEl);
}, 0);
}
findActiveLink = (): ElementRef | undefined => {
return this.linkRefs.toArray()
.find(e => e.nativeElement.classList.contains(this.activeClass))
}
}https://stackoverflow.com/questions/49900371
复制相似问题