如何在不使用Js id选择器的情况下在Angular中动态获取* ngFor中的元素

dota2pro

我有一个具有引导程序下拉列表的组件,我想关注下拉列表跨度上设置的当前周

我可以通过设置id来使用普通的javascript,然后使用Jquery .focus()方法来专注于此,但是我想知道是否有使用ViewChildren等方法使用它的7/7 +棱角分明的方法。

<button class="btn dropdown-toggle"
        (click)="focusOnWeek(currentWeek)"
        type="button" data-toggle="dropdown">
  <span>Week {{currentWeek}}</span> // currentWeek = 5 need to focus on week 5 <a> tag on click of this span
</button>
<ul class="dropdown-menu">
  <li *ngFor="let week of weekList">//weekList = [1,2,3,4,5,6,7,8,9,10]>
    <a class="dropdown-item"
      Week {{week}} 
    </a>

  </li>
</ul>

在“单击按钮”上,将聚焦当前周。

康纳斯·范

您可以使用ViewChildren查找要聚焦的锚元素。首先,您#anchor在锚元素上设置模板参考变量(例如):

<ul class="dropdown-menu">
  <li *ngFor="let week of weekList">
    <a #anchor class="dropdown-item">Week {{week}}</a>
  </li>
</ul>

在代码中,您可以使用引用锚元素ViewChildren

@ViewChildren("anchor") anchorList: QueryList<ElementRef>;

然后将焦点放在对应于指定星期的锚上:

focusOnWeek(week) {
  const weekIndex = this.weekList.indexOf(week);
  const elementRef = this.anchorList.find((item, index) => index === weekIndex);
  elementRef.nativeElement.focus();
}

有关演示,请参见此堆叠闪电战


如果单击时菜单不立即可见,则可以通过QueryList.changes事件监视菜单项的创建当检测到可见项目时,可以使用设置焦点currentWeek

ngAfterViewInit() {
  this.anchorList.changes.subscribe(() => {
    if (this.anchorList.length > 0) {
      const weekIndex = this.weekList.indexOf(this.currentWeek);
      const elementRef = this.anchorList.find((item, index) => index === weekIndex);
      elementRef.nativeElement.focus();
    }
  });
}

有关演示,请参见此堆叠闪电战

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不使用 DOM 操作的情况下在 React JS 中获取 <body>

如何在不使用指令的情况下在angularjs中动态添加元素?

如何在不使用document.write的情况下在JS中打印新行?

如何在不使用GPS的情况下在android 9(Pie)设备中获取Cell ID和位置区号?

如何在不使用`osascript`的情况下在Python中获取macOS启动驱动器的名称?

如何在不使用databse的情况下在Crystal报表中添加动态图像?

如何在不使用 for 循环的情况下在 R 中实现动态计数?

如何在不使用 distinct 方法的情况下在 Django 中获取不同的过滤查询集?

我如何在不使用HttpContext静态类的情况下在ApiController中获取HttpRequest对象?

如何在不使用布局的情况下在自定义目标中获取ThreadId?

如何在不使用运动训练的情况下在watchOS 3+中获取心率

如何在不使用 fseek 或 stat 的情况下在 C 中获取文件大小?

如何在不使用array_push的情况下在laravel 5.4中获取数据

如何在不使用括号的情况下在Powershell中获取对象的属性?

如何在没有日期选择器的情况下在联系表 7 中显示今天的日期

如何在不使用可变变量的情况下在Scala中编程迭代器?

如何在不使用迭代器的情况下在Golang中循环?

如何在不使用迭代器的情况下在c ++中打印地图

如何在不使用包装器的情况下在React中渲染字符串数组?

如何在不使用任何内置函数的情况下在数组中插入元素

如何在不使用JQuery函数的情况下在angular 4中进行深度复制?

如何在不使用jQuery的情况下在Angular中添加内容

如何在不使用 Angular 中的属性绑定的情况下在父子之间进行通信?

在不使用CSS选择器的情况下删除Puppeteer中的DOM元素?

如何在不使用JS中任何ID的情况下按类名更改元素的样式属性?

Angular:如何在没有事件的情况下在* ngFor DOM元素后面获取对象?

Angular-如何从ngFor中删除元素

如何在不使用 Node.js 的情况下在 Javascript 中执行 Python?这可能吗?

如何在不使用Flask和Django的情况下在核心Python中添加CSS和JS文件?