Angular 7绑定指令

时间:2019-07-17 02:38:24

标签: typescript angular7

我在使用指令时遇到问题。当它已经导入时。这是示例:

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"
                />

但是我的指令不起作用,它仍然获取字符串。有什么建议吗?我真正想要的是,当用户在输入中键入内容时,它应该只接受数字而不是字符串。

1 个答案:

答案 0 :(得分:0)

OnlyNumber="true"

将值设置为字符串,使用属性绑定而不是属性绑定。

[OnlyNumber]="true"

您不应创建像这样的指令,因为它违反了可访问性准则。如果值未通过验证,则输入字段应包含所有按键,并提供易于理解的验证消息。