Search code examples
angularevent-handlingangular-directive

block non number directive in Angular 2


Could be this the best angular 2-way to block non number keys using directive?

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

@Directive({
    selector: '[blockNonNumber]'
})

export class blockNonNumberDirective {

    @HostListener('keydown', ['$event']) onKeyDown(event: any) {
        let keyCode = [8, 9, 37, 39, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 110];
        if ( keyCode.indexOf(event.which) === -1) event.preventDefault();
    }
}

Solution

  • I am using this to allow user to enter num only,

    export class blockNonNumberDirective {
      constructor() { }
    
      @HostListener('keypress') onkeypress(e){
        let event = e || window.event;
        if(event){
          return this.isNumberKey(event);
        }
      }
    
      isNumberKey(event){
         let charCode = (event.which) ? event.which : event.keyCode;
         if (charCode > 31 && (charCode < 48 || charCode > 57)){
            return false;
         }
         return true;
      }
    }