如何检查输入字段是否在 Angular 7 中处于焦点

Aje*_*ala 14 angular angular-forms angular6 angular7

我有一个表单,我想知道表单中的任何输入字段是否有焦点?

我阅读了“ NgForm ”文档,但没有找到与“ focus ”相关的任何内容。

我发现感动,但它不能满足需求。

rac*_*man 19

您可以使用 focus 和 blur 事件来跟踪字段获得或失去焦点:

<input (focus)="onFocus()" (blur)="onBlur()">
Run Code Online (Sandbox Code Playgroud)

还有 javascript 自己的:

document.hasFocus() :文档或文档内的任何元素是否具有焦点。

document.activeElement :包含当前具有焦点的元素的属性。


Vol*_*hat 10

一次您可以有一个重点输入。可能最简单的方法是使用焦点事件并将元素传递给您的组件

@Component({
  selector: 'my-comp',
  template: `
    <input type="text "(focus)="onFocus($event)" (blur)="onFocus()" />
  `
})
export class AppComponent {
  selectedElement: any;
  onFocus(event) {
    if(event){
       this.selectedElement = event.target;
    } else {
       this.selectedElement = null; 
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

其他选项是编写指令来设置特定类的焦点

import { Directive, HostListener, HostBinding } from '@angular/core';
@Directive({
  selector: '[trackFocus]'
})
export class TrackFocusDirective {
  @HostBinding('class.my-focused-element') isFocused: boolean;
  constructor() {}

  @HostListener('focus', ['$event']) onFocus(e) {
    this.isFocused = true;
  }
  @HostListener('blur', ['$event']) onblur(e) {
    this.isFocused = false;
  }
}
Run Code Online (Sandbox Code Playgroud)

所以现在你可以这样做

<input type="text"  trackFocus/>
Run Code Online (Sandbox Code Playgroud)