我的模板是这样的:
<div *ngFor="let data of array"> <div #div></div> </div>
有没有方法可以让我用#来给每个div命名?2如果有的话,我以后怎么在我的TS文件中访问它们?顺便问一下,这些#叫什么?我现在不知道它们是什么了(我只知道它们的用途),所以无法搜索它们
w8ntj3qf1#
TL;DR使用ViewChildren代替ViewChild正如@商业自杀所提到的,你不能动态地设置引用。#div称为模板引用变量。您可以通过*.ts文件中的ViewChildren访问您的 * div *。样品:@ViewChildren('div') divs: QueryList<ElementRef>然后可以在新的QueryList上调用多个方法,如forEach或find。
ViewChildren
ViewChild
#div
*.ts
@ViewChildren('div') divs: QueryList<ElementRef>
QueryList
forEach
find
aiazj4mn2#
有一种替代方法可以通过事件捕获和处理循环中的动态元素。
<div *ngFor="let name of names"> <input #boofoo type="text" (click)="onClick($event, name)" /> <button (click)="boofoo.click()">Change text</button> </div>
请参见示例stackblitz
taor4pac3#
您可以创建一个子组件,该子组件将具有其逻辑示例:
菜单-水平.组件.html
<nav id='site-header__nav__desktop'> <template-menu-item *ngFor="let link of navLinks" [navItem]="link"> </template-menu-item> </nav>
菜单项.组件.html
<div> <a class="nav-link" #parent routerLink="/test" (click)="toggle()"> {{ navItem.text }} </a> <ul #children class="children-menu" *ngIf="navItem.children"> <li *ngFor="let child of navItem.children"> <a [href]="child.link"> {{child.text}} </a> </li> </ul> </div>
在此示例中,toggle操作的目标是菜单项的子项,否则它将选择找到的第一个子项
3条答案
按热度按时间w8ntj3qf1#
TL;DR使用
ViewChildren
代替ViewChild
正如@商业自杀所提到的,你不能动态地设置引用。
#div
称为模板引用变量。您可以通过
*.ts
文件中的ViewChildren访问您的 * div *。样品:
@ViewChildren('div') divs: QueryList<ElementRef>
然后可以在新的
QueryList
上调用多个方法,如forEach
或find
。aiazj4mn2#
有一种替代方法可以通过事件捕获和处理循环中的动态元素。
请参见示例stackblitz
taor4pac3#
您可以创建一个子组件,该子组件将具有其逻辑
示例:
菜单-水平.组件.html
菜单项.组件.html
在此示例中,toggle操作的目标是菜单项的子项,否则它将选择找到的第一个子项