首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角ElementRef的routerLinkActive

角ElementRef的routerLinkActive
EN

Stack Overflow用户
提问于 2018-04-18 12:58:33
回答 1查看 1.5K关注 0票数 3

在标题中,我需要得到ElementRef的routerLinkActive,以了解我需要在哪里放置一个“墨水条”(例如材料设计标签)在正确的位置。

这是我的sideNav菜单

代码语言:javascript
复制
  <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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-18 15:31:19

您可以通过使用ElementRef选项使用ViewChildren和查询RouterLinkActive指令来找到read: ElementRef

我们延迟了findActiveLink方法在setTimeout中的执行,以便RouterLinkActive有时间用适当的CSS类更新视图。

代码语言:javascript
复制
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))
  }
}

现场演示

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49900371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档