我在使用指令时遇到问题。当它已经导入时。这是示例:
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) {
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();
}
}
}
并与like一起使用
<input
type="text"
class="form-control"
name="amount"
id="field_amount"
min="1"
formControlName="amount"
[class.is-invalid]="editForm.get('amount').invalid && (editForm.get('amount').dirty || editForm.get('amount').touched)"
[value]="editForm.get('amount').value | numberFormat"
OnlyNumber="true"
/>
但是我的指令不起作用,它仍然获取字符串。有什么建议吗?我真正想要的是,当用户在输入中键入内容时,它应该只接受数字而不是字符串。
答案 0 :(得分:0)
OnlyNumber="true"
将值设置为字符串,使用属性绑定而不是属性绑定。
[OnlyNumber]="true"
您不应创建像这样的指令,因为它违反了可访问性准则。如果值未通过验证,则输入字段应包含所有按键,并提供易于理解的验证消息。