【发布时间】:2018-08-20 17:58:28
【问题描述】:
我正在尝试在我的 HTML 中添加一个指令,以便我可以只允许用户输入数字。
这是我的指令
import { Directive, ElementRef, HostListener, Input } from '@angular/core';
@Directive({
selector: '[OnlyNumber]'
})
export class OnlyNumber {
regexStr = '^[0-9]*$';
constructor(private el: ElementRef) { }
@Input() OnlyNumber: boolean;
@HostListener('keydown', ['$event']) onKeyDown(event: any) {
let e = <KeyboardEvent>event;
if (this.OnlyNumber) {
if ([46, 8, 9, 27, 13, 110, 190].indexOf(e.keyCode) !== -1 ||
// Allow: Ctrl+A
(e.keyCode == 65 && e.ctrlKey === true) ||
// Allow: Ctrl+C
(e.keyCode == 67 && e.ctrlKey === true) ||
// Allow: Ctrl+V
(e.keyCode == 86 && e.ctrlKey === true) ||
// Allow: Ctrl+X
(e.keyCode == 88 && e.ctrlKey === true) ||
// Allow: home, end, left, right
(e.keyCode >= 35 && e.keyCode <= 39)) {
// let it happen, don't do anything
return;
}
let ch = String.fromCharCode(e.keyCode);
let regEx = new RegExp(this.regexStr);
if (regEx.test(ch))
return;
else
e.preventDefault();
}
}
}
我在 HTML 中使用过这个指令。
<div class="form-group">
<h6>Estimated Hours</h6>
<input type="text" class="form-control rounded-0" placeholder="Estimated Hours" formControlName="EstimatedHours" OnlyNumber>
</div>
我在 app.module.ts 的声明下添加了一个指令。我这里有什么遗漏吗,因为我可以输入任何字母。
【问题讨论】:
-
你为什么使用指令你可以使用Validators.pattern
-
谢谢。但是如果我想使用指令呢?
-
如果你使用指令你不会得到 FormControl 错误
-
@RiteshMaharjan 你不想把 OnlyNumber 作为一个属性放在 标记中,即..,[OnlyNumber] 因为你用 @Input() 装饰器定义它并设置它是真的吗?
-
你的指令中有 if (this.OnlyNumber),所以你的输入必须是 angular.io/guide/…
标签: angular angular6 angular2-directives angular-reactive-forms