仅输入数字 Angular
Numbers only Input in Angular
我正在尝试实现一个输入字段,其中只允许使用数字键。
为此,我已经成功地在表单中实现了仅数字验证。
但这里的要求是除了数字键外,其他键都不能用。
为此,我绑定了一个 @HostListener
在这种情况下,当我们点击字母键时,它不会显示在输入字段中,但会分配该字母的值。
请检查代码:
HostListener 代码:
import { Directive, ElementRef, HostListener, Input } from '@angular/core';
import { NgControl } from '@angular/forms';
@Directive({
selector: 'input[numbersOnly]'
})
export class NumberDirective {
constructor(private _el: ElementRef) { }
@HostListener('input', ['$event']) onInputChange(event) {
const initalValue = this._el.nativeElement.value;
this._el.nativeElement.value = initalValue.replace(/[^0-9]*/g, '');
if ( initalValue !== this._el.nativeElement.value) {
event.stopPropagation();
}
}
}
HTML :
Type anything other than numbers, the change is fired even if the textfield content does not change :
<br/>
<input type="text" [(ngModel)]="value" (ngModelChange)="onChange($event)" numbersOnly/>
<br/>
Change fire counter : {{counter}}
<br>
Value = {{value}}
TS 文件:
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
value='';
counter = 0;
onChange(event) {
this.counter = this.counter + 1;
}
}
所以看到实际代码运行请点击:https://stackblitz.com/edit/angular-numbers-only-directive-tb66et
请帮忙。
目的是该值不应只有数字字符。
此致,
阿希什
看看你的正则表达式是正确的,当你控制 onChange
中的值时,该值是正确的。唯一的问题是它显示不正确,我尝试用 DetectionRef.detectChanges 手动更新它但没有帮助。我做了您需要的,但方式略有不同,请查看 .html 和指令
https://stackblitz.com/edit/angular-numbers-only-directive-xttsje
您可以尝试在指令中使用 keydown 事件,如此处所述
https://codeburst.io/digit-only-directive-in-angular-3db8a94d80c3
这里也用到:
Angular2 - Input Field To Accept Only Numbers
您可以通过检查他们的代码只允许数字:
<input type="number"
(keypress)="($event.charCode >= 48 && $event.charCode < 58)"/>
我正在尝试实现一个输入字段,其中只允许使用数字键。 为此,我已经成功地在表单中实现了仅数字验证。
但这里的要求是除了数字键外,其他键都不能用。 为此,我绑定了一个 @HostListener
在这种情况下,当我们点击字母键时,它不会显示在输入字段中,但会分配该字母的值。
请检查代码: HostListener 代码:
import { Directive, ElementRef, HostListener, Input } from '@angular/core';
import { NgControl } from '@angular/forms';
@Directive({
selector: 'input[numbersOnly]'
})
export class NumberDirective {
constructor(private _el: ElementRef) { }
@HostListener('input', ['$event']) onInputChange(event) {
const initalValue = this._el.nativeElement.value;
this._el.nativeElement.value = initalValue.replace(/[^0-9]*/g, '');
if ( initalValue !== this._el.nativeElement.value) {
event.stopPropagation();
}
}
}
HTML :
Type anything other than numbers, the change is fired even if the textfield content does not change :
<br/>
<input type="text" [(ngModel)]="value" (ngModelChange)="onChange($event)" numbersOnly/>
<br/>
Change fire counter : {{counter}}
<br>
Value = {{value}}
TS 文件:
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
value='';
counter = 0;
onChange(event) {
this.counter = this.counter + 1;
}
}
所以看到实际代码运行请点击:https://stackblitz.com/edit/angular-numbers-only-directive-tb66et
请帮忙。 目的是该值不应只有数字字符。
此致, 阿希什
看看你的正则表达式是正确的,当你控制 onChange
中的值时,该值是正确的。唯一的问题是它显示不正确,我尝试用 DetectionRef.detectChanges 手动更新它但没有帮助。我做了您需要的,但方式略有不同,请查看 .html 和指令
https://stackblitz.com/edit/angular-numbers-only-directive-xttsje
您可以尝试在指令中使用 keydown 事件,如此处所述
https://codeburst.io/digit-only-directive-in-angular-3db8a94d80c3
这里也用到:
Angular2 - Input Field To Accept Only Numbers
您可以通过检查他们的代码只允许数字:
<input type="number"
(keypress)="($event.charCode >= 48 && $event.charCode < 58)"/>