如何在HostListener输入操作中阻止Default()

时间:2018-04-25 12:22:40

标签: angular angular5 angular-directive

我试图编写一个指令,限制用户在输入文本控件中输入仅数字字符。

@Directive({
  selector: '[numericControl]'
})
export class NumericControlDirective {

    contructor(
        private el: ElementRef,
    ) {}

    @HostListener('input', ['$event'])
    onInput(e: any) {
        if (e.which < 48 || e.which > 57) {
            e.preventDefault();
        }
    }

}

用法

<input type="text" placeholder="Volume" numericControl />

但它不起作用,任何人遇到过这个问题?

2 个答案:

答案 0 :(得分:4)

使用键盘事件类型 - keydownkeypress

@HostListener('keydown', ['$event'])
onInput(e: any) {
  if (e.which < 48 || e.which > 57) {
      e.preventDefault();
  }
}

答案 1 :(得分:0)

您也可以使用

@HostListener('keydown', ['$event']) onKeyDown(event) {
    let e = <KeyboardEvent>event;
    if (e.which < 48 || e.which > 57) {
        e.preventDefault();
    }
}