【发布时间】:2019-06-17 20:20:46
【问题描述】:
现在我正在制作一个应该与角度反应形式兼容的货币掩码指令。这是我的 Stackblitz https://stackblitz.com/edit/angular-8-currency-directive-insert。
在输入元素中,我希望当我输入 1、2、3、4、5 时,我会在控制台中看到 {currency: "$1,234"} 因为掩码运行 .substring(0, 4) 但是我看到 {currency: "$1,2345"}。 我在输入元素中看到正确的显示值为 $1,234。
如果我将 .substring(0,4) 更改为 .substring(0,3),则输入元素中的显示值显示为 $1,23,而我希望它显示为 $1,234。控制台输出正确的 {currency: "$1,234"}
值非常欢迎任何能找到问题根源的建议!我已经完成了一些工作,包括拆分成一个数组、检查、弹出末端和加入,但这些修复并不理想。不过,仍然欢迎任何建议!
感谢您的支持。
要关注的代码在下面提供的 currency.directive.ts 中:
onInputChange(event, backspace) {
let newVal = event.replace(/\D/g, '');
if (newVal.length === 0) {
newVal = '';
} else if (newVal.length <= 3) {
newVal = newVal.replace(/^(\d{0,3})/, '$1');
// } else if (newVal.length <= 4) {
// newVal = newVal.replace(/^(\d{0,1})(\d{0,3})/, '$1,$2');
} else {
newVal = newVal.substring(0, 4);
newVal = newVal.replace(/^(\d{0,1})(\d{1,3})/, '$1,$2');
}
this.ngControl.valueAccessor.writeValue("$"+ newVal);
// console.log(this.toNumber(newVal))
}
【问题讨论】:
-
在我写答案之前,我需要问一下,您是否评估过 Angular 的内置
currencyPipe.transform(numberValue, 'USD', 'symbol', '1.0')? -
我认为你做错了,检查blog.thoughtram.io/angular/2016/07/27/…
-
如果您有文档重新分级您正在使用的方法,请分享
-
嗨@BenRacicot,谢谢。是的,我们对此进行了调查,但发现它不符合我们的要求,因此决定采用这种方法,该方法仅具有上面指定的最后一个要求。我也在 stackblitz 上留下了一些 cmets。
-
我正在努力,是的,我确实看到
CurrencyPipe有很多不足之处。
标签: regex angular typescript angular-reactive-forms