Creating an Angular Directive - Auto Focus Form Control

Published on

I was working on a side project with a lot of forms and want a simple way to set focus to a specific form control on each page/view when the page/view loads.

The code snippet below is my current solution for this.

import { AfterViewInit, Directive, ElementRef } from '@angular/core';

@Directive({
  selector: 'input[fooAutoFocusControl],textarea[fooAutoFocusControl],select[fooAutoFocusControl]'
})
export class FooAutoFocusControlDirective implements AfterViewInit {
  constructor(
    private _elementRef: ElementRef
  ) { }

  ngAfterViewInit(): void {
    this.setFocusToControl();
  }

  public setFocusToControl(): void {
    setTimeout(() => this._elementRef.nativeElement.focus());
  }
}

The concept is straight forward. Inject the ElementRef of the element containing the directive, then we access the native element and call the focus() method.

An example of this being used can be seen below.

<input
  type="text"
  name="firstName"
  formControlName="firstName"
  fooAutoFocusControl
/>

After the component initializes, the focus should be set to this control!

comments powered by Disqus