【发布时间】:2018-05-27 18:00:51
【问题描述】:
我正在尝试编写只允许文本输入文本中的数字的代码。我编写了以下指令。
import { Directive, ElementRef, Input, HostListener } from '@angular/core'
@Directive({
selector: '[appAllowNumberonly]'
})
export class AllowNumberonlyDirective {
private el: HTMLInputElement;
constructor(private elementRef: ElementRef) {
this.el = this.elementRef.nativeElement;
}
@HostListener("keydown", ["$event"])
onKeyDown(e: KeyboardEvent) {
if (this.el.value == undefined) {
this.el.value = '';
}
let transformedInput = this.el.value.replace(/[^0-9]/g, '');
if (transformedInput != this.el.value) {
this.el.value = transformedInput;
}
}
@HostListener("keyup", ["$event"])
onKeyUp(e: KeyboardEvent) {
if (this.el.value == undefined) {
this.el.value = '';
e.preventDefault();
}
let transformedInput = this.el.value.replace(/[^0-9]/g, '');
if (transformedInput != this.el.value) {
this.el.value = transformedInput;
}
return transformedInput;
}
@HostListener("blur", ["$event.target.value"])
onBlur(value) {
if (this.el.value == undefined) {
this.el.value = '';
}
let transformedInput = this.el.value.replace(/[^0-9]/g, '');
if (transformedInput != this.el.value) {
this.el.value = transformedInput;
}
}
}
这工作得很好,但是用户能够在文本框中输入值,然后我的指令正在删除非数字的值,但我想阻止用户进入文本框,我该如何实现?
我也想用鼠标覆盖复制粘贴场景。
我有下面的 Plunker,它在 AngularJS (1.x) 中运行良好,我如何转换为 Angular?我无法使用解析器。
http://jsfiddle.net/thomporter/DwKZh/
我也试过这个:
【问题讨论】:
-
@Günter Zöchbauer 你能帮忙吗?
-
我希望你没有使用“Angular 2”,因为它是一年多前的版本。框架的名称是“Angular”,而不是“Angular 2”。目前是第 5 版,每年发布两次新版本。由于它大部分是向后兼容的,因此请在提出广泛的问题时不要指定版本号。
-
是的,我没有使用 angular 2,因为我已经习惯了这个版本,所以我提到实际上我使用的是 angular 版本 5
标签: angular typescript angular2-directives