javascript - @HostListener 用于自动填充 Angular 中的输入字段
问题描述
在我选择自动填充的表单上,所有input
字段都填充有我在电话号码 input
字段中遇到问题的值。填充的值1233211232
使用自动填充。
(123) 321-1232
我有一个自定义指令,只要用户在input
字段中手动输入,它就会将电话号码转换为这种格式。但是使用自动填充,该@HostListener
块似乎不起作用。如何检测input
现场的变化?
export class PhoneDirective {
constructor(public ngControl: NgControl) {}
@HostListener('click', [`$event.target`])
onClickCalled(event) {
this.onInputChange(event.value, true);
}
onInputChange(event, backspace) {
if (event == null) {
return '';
}
let newVal = event.replace(/\D/g, '');
if (backspace && newVal.length <= 6) {
newVal = newVal.substring(0, newVal.length - 1);
}
if (newVal.length === 0) {
newVal = '';
} else if (newVal.length <= 3) {
newVal = newVal.replace(/^(\d{0,3})/, '($1)');
} else if (newVal.length <= 6) {
newVal = newVal.replace(/^(\d{0,3})(\d{0,3})/, '($1) $2');
} else if (newVal.length <= 10) {
newVal = newVal.replace(/^(\d{0,3})(\d{0,3})(\d{0,4})/, '($1) $2-$3');
} else {
newVal = newVal.substring(0, 10);
newVal = newVal.replace(/^(\d{0,3})(\d{0,3})(\d{0,4})/, '($1) $2-$3');
}
this.ngControl.valueAccessor.writeValue(newVal);
}
}
这是我正在使用的电话号码的正则表达式
const isPhoneNumberValid = (/(\W|^)[(](?!000)\d{3}[)]{0,1}[\s-]{0,1}\d{3}[\s-]{0,1}\d{4}(\W|$)/).test(control.value);
有人可以帮忙吗?
解决方案
推荐阅读
- html - 单选按钮在事件触发时以不同的方式工作,但单选按钮需要点击 2 次才能被选中
- php - PHP删除所有数组项
- c - 在文件中逐行存储一个巨大的数组会导致文件损坏
- java - 如何使用 Repository Hibernate 和 Pageable 与 Java Spring 进行参数搜索?
- linux - zeppelin hortonworks 沙盒的默认用户
- node.js - 如何从 MongoDB 的数组字段中删除特定的子文档?
- javascript - 如何使用 GetElementById 获取的不是对象而是元素的值?
- javascript - Discord bot TypeError:client.guilds.forEach 不是函数
- .net - .NET WebApp 和 MQTT 代理之间的通信
- html - 无法在 CSS 中让两个部分彼此相邻