gpt4 book ai didi

Angular 获取 routerLinkActive 的 ElementRef

转载 作者:行者123 更新时间:2023-12-05 04:06:22 25 4
gpt4 key购买 nike

如标题所示,我需要获取 routerLinkActive 的 ElementRef,以便了解我需要在正确位置放置“墨水栏”(例如 Material Design 选项卡)的位置。

这是我的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 像素处,元素之间的偏移量为 60 像素。但是我需要知道哪个是开始的事件元素(例如,如果用户在浏览器中粘贴 URL),有一种方法可以获取 activeLink 的 ElementRef

最佳答案

您可以使用 ViewChildren 并查询 RouterLinkActive 指令,使用 read: ElementRef 选项找到 ElementRef .

我们在 setTimeout 中延迟执行 findActiveLink 方法,让 RouterLinkActive 有时间用适当的 CSS 类更新 View 。

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))
}
}

Live demo

关于Angular 获取 routerLinkActive 的 ElementRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49900371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com