typescript ngFor内部动态元素的angular viewChild

wnvonmuf  于 2022-12-14  发布在  TypeScript
关注(0)|答案(3)|浏览(151)

我的模板是这样的:

<div *ngFor="let data of array">
    <div #div></div>
</div>

有没有方法可以让我用#来给每个div命名?2如果有的话,我以后怎么在我的TS文件中访问它们?
顺便问一下,这些#叫什么?我现在不知道它们是什么了(我只知道它们的用途),所以无法搜索它们

w8ntj3qf

w8ntj3qf1#

TL;DR使用ViewChildren代替ViewChild
正如@商业自杀所提到的,你不能动态地设置引用。
#div称为模板引用变量。
您可以通过*.ts文件中的ViewChildren访问您的 * div *。
样品:@ViewChildren('div') divs: QueryList<ElementRef>
然后可以在新的QueryList上调用多个方法,如forEachfind

aiazj4mn

aiazj4mn2#

有一种替代方法可以通过事件捕获和处理循环中的动态元素。

<div *ngFor="let name of names">
  <input #boofoo type="text" (click)="onClick($event, name)" />
  <button (click)="boofoo.click()">Change text</button>
</div>

请参见示例stackblitz

taor4pac

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操作的目标是菜单项的子项,否则它将选择找到的第一个子项

相关问题