【发布时间】:2018-07-23 07:33:58
【问题描述】:
我正在使用 Angular 6 并编写了一个指令,以将输入限制为仅限数字,用于我的某些输入字段。该指令如下所示
import { Directive, ElementRef, HostListener } from '@angular/core';
@Directive({
selector: '[NumbersOnly]'
})
export class NumbersOnlyDirective {
// Allow decimal numbers and negative values
private regex: RegExp = new RegExp(/^-?[0-9]+(\.[0-9]*){0,1}$/g);
// Allow key codes for special events. Reflect :
// Backspace, tab, end, home
private specialKeys: Array<string> = ['ArrowLeft', 'ArrowRight', 'Backspace', 'Tab', 'End', 'Home'];
constructor(private el: ElementRef) { }
@HostListener('keydown', ['$event'])
onKeyDown(event: KeyboardEvent) {
// Allow Backspace, tab, end, and home keys
if (this.specialKeys.indexOf(event.key) !== -1) {
return;
}
const current: string = this.el.nativeElement.value;
const next: string = current.concat(event.key);
if (next && !String(next).match(this.regex)) {
event.preventDefault();
}
}
}
无论我在哪里输入字段,我都会使用如下指令
<input [(ngModel)]="sendLinkMobile" NumbersOnly type="text" id="mobile-num"
class="form-control m-no" placeholder="Mobile Number" requried minlength="10"
maxlength="10" aria-label="Recipient's username" aria-describedby="basic-addon2">
代码在所有最新的浏览器、手机、标签中都能完美运行。但是,在 chrome 49.xx 及更低版本上使用它时,输入字段不采用任何值。谁能帮我看看问题出在哪里?
提前致谢。
【问题讨论】:
标签: javascript angular typescript input angular-directive