angular - Angular:如何使用指令在文本框中只允许整数
问题描述
我正在尝试创建我的第一个指令。我想要的是简单地防止在文本字段上打字。
这是我尝试过的:
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) {
event.stopPropagation();
}
}
<input type="text" ngModel numbersOnly>
但是用户仍然可以输入。
我也试过了,event.preventDefault();
但也没有用。我究竟做错了什么?
解决方案
你错过了重要的代码:)
您忘记检查有效输入,因此您可以使用正则表达式来允许整数:
指令 TS 代码:
import { Directive, HostListener, ElementRef } from '@angular/core';
@Directive({
selector: 'input[numbersOnly]'
})
export class NumbersOnlyDirective {
constructor(private _el: ElementRef) { }
@HostListener('input', ['$event']) onInputChange(event) {
const val = this._el.nativeElement.value;
this._el.nativeElement.value = val.replace(/[^0-9]*/g, '');
if (val !== this._el.nativeElement.value) {
event.stopPropagation();
}
}
}
推荐阅读
- java - 使用 Runnable mRunnable.removeCallbacks(mStatusChecker) 的服务不停止应用程序在销毁模式下崩溃
- sql - 使用没有 FOREIGN KEY 的 REFERENCES 是否仍会创建外键?
- java - 从 Netbeans 到 Raspberry Pi 的 java 应用程序远程调试
- javascript - 如何过滤对象的javascript数组
- javascript - 如何使 typeahead 小部件中的搜索更有效
- python - 具有短测量间隔的信号的傅立叶变换
- c - 解析分为几部分的格式化 C 字符串
- javascript - 检查 P 标签是否有带有特定 id 的 IMG 标签
- node.js - fs.write 文件仅在节点 index.js 执行时写入文件。当 pkg 作为 CLI 运行时,它不会写入
- c++ - unordered_map 以类对象为值