【问题标题】:How to use nativeElement.focus() with each unique input inside ngFor in angular如何在 ngFor 中以角度使用 nativeElement.focus() 和每个唯一输入
【发布时间】:2018-12-27 18:11:45
【问题描述】:

我有一个 ngFor 循环,如下所示。

<div *ngFor= "let transporter of transporters">
    <input type="text"  [(ngModel)]= "transporter.name" #inputTransporter *ngIf="openTransporterFreightEditing">
    <mat-icon class="cursor-btn"  (click)="openEdit()">mode_edit</mat-icon>
</div>

以及TS代码:

 openTransporterFreightEditing:boolean = false
@ViewChild('inputTransporter') inputTransporter: ElementRef;

openEdit() {
    this.openTransporterFreightEditing = true
    this.inputTransporter.nativeElement.focus()
}

输入字段最初是隐藏的。单击编辑符号时,输入变为可见。我想在输入可见时立即集中它。但是,我想通过使用 nativeElement.focus() 来关注一个特定的输入,但由于循环创建的每个输入元素中的相同 ID“inputTransporter”,我遇到了困难。 如何基于(单击)关注一个特定的输入 ID。如果我必须为每个元素生成唯一 ID,我可能必须使用 [attr.id],它不适用于 @ViewChild

我在 stackblitz 中的代码:

https://stackblitz.com/edit/angular-4hedvr?file=src%2Fapp%2Fapp.component.ts

【问题讨论】:

    标签: javascript angular typescript


    【解决方案1】:

    您可以使用@ViewChildren 访问QueryList 的数组。

    您可以将index 传递给您的openEdit 函数并访问所需的本机元素,然后将其聚焦。

    有关如何访问孩子的演示示例,请参阅以下链接:-

    https://stackblitz.com/edit/angular-sgudix?file=src%2Fapp%2Fapp.component.ts

    app.component.html

    <div>
      <div *ngFor="let a of [1,2,3]; let i=index">
          <p #para>Para {{a}}</p>
        <button (click)="colorMe(i)">Color Me</button>
      </div>
    </div>
    

    app.component.ts

      @ViewChildren('para') paras: any;
      paraElements: any;
    
      ngAfterViewInit() {
        this.paraElements = this.paras.map(para => {
          console.log('Paras: ', para.nativeElement);
          return para.nativeElement;
        })
      }
    
      colorMe(index) {
        console.log('Index: ', index);
        this.paraElements[index].style.backgroundColor = '#5789D8';
      }
    

    这应该让您对如何在最后实施它有一个很好的了解。

    希望对你有帮助。

    PS:有些东西不符合标准,例如在 HTML 中声明变量、使用 any 类型等,因为这是一个粗略的演示应用程序,只是提供一个想法。

    【讨论】:

    • 我刚刚开始使用 angular,你能解释一下如何在 focus() 中使用索引吗?
    • 好的,我会在演示代码中帮助您。给我几分钟。
    • 请检查,我已经制作了一个示例,您可以在其中为您的段落着色。以同样的方式来集中你的输入。现在告诉我是否有帮助。
    • 错误是“无法读取未定义的属性'map'”。初始化组件时未填充 paras 变量
    • 请在下面的stackblitz中使用类似stackblitz.com/edit/angular-xhfr6w?file=src/app/…
    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2019-08-28
    相关资源
    最近更新 更多