首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >角度聚焦于具有ngIf的输入元素。

角度聚焦于具有ngIf的输入元素。
EN

Stack Overflow用户
提问于 2019-06-24 05:53:16
回答 3查看 2.9K关注 0票数 2

我有两个输入元素,它们在*ngIf条件下显示。

代码语言:javascript
复制
<input type="text" id="textInput" *ngIf="showTextInput">
<input type="number" id="numericInput" *ngIf="showNumericInput">

<button (click)="editButtonClicked($event)">

单击按钮应将焦点设置为适当的输入元素。

代码语言:javascript
复制
editButtonClicked(event) {
  // Focus on either #textInput or #numericInput element
}

我查看了ElementRef,给出了像#textInput这样的html输入元素标记,然后在类中定义它们,例如:

代码语言:javascript
复制
@ViewChild('textInput') textInput: ElementRef;

...but显然不适用于具有*ngIf条件的元素。

如何专注于输入元素,按钮的onClick?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-15 18:01:11

您可以实现一个超级简单的指令,并具有所需的效果。

html

代码语言:javascript
复制
<input type="text" autoFocus *ngIf="isInputVisible">

指令

代码语言:javascript
复制
import { Directive, ElementRef, OnInit } from "@angular/core";

@Directive({
  selector: "[autoFocus]"
})
export class AutoFocusDirective implements OnInit {
  private inputElement: HTMLElement;

  constructor(private elementRef: ElementRef) {
    this.inputElement = this.elementRef.nativeElement;
  }

  ngOnInit(): void {
    this.inputElement.focus();
  }
}

工作演示:

https://stackblitz.com/edit/angular-ivy-vvgcch?file=src%2Fapp%2Fdirectives%2Fauto-focus.directive.ts

票数 6
EN

Stack Overflow用户

发布于 2019-06-24 06:09:43

是的,@ViewChild不适用于结构指令控制下的元素。有两个解决办法可供您应用:

  1. 删除*ngIf指令并使用CSS style: 'display:none'隐藏元素。
  2. 使用vanilla document.getElementById('someId');从DOM中选择元素,然后对元素进行对焦。

我更喜欢第1点。

票数 1
EN

Stack Overflow用户

发布于 2019-06-24 06:30:56

如果您正在寻找模板引用变量,也可以通过模板引用变量进行此操作。

中的html

代码语言:javascript
复制
<input #text type="text" id="textInput">
<input #number type="number" id="numericInput">

<button (click)="editButtonClicked($event, text, number)"> Click </button>

in ts

代码语言:javascript
复制
editButtonClicked(e, text, number){
    if(text.value) {
      text.focus()
    } else {
      number.focus()
    }
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56730540

复制
相关文章

相似问题

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