Probé las soluciones anteriores, pero el valor que va al modelo fue el valor formateado y luego regresó y me dio errores de currencyPipe. Entonces tuve que
[ngModel]="transfer.amount | currency:'USD':true"
(blur)="addToAmount($event.target.value)"
(keypress)="validateOnlyNumbers($event)"
Y en la función de addToAmount -> cambio en desenfoque porque el ngModelChange me estaba dando problemas con el cursor.
removeCurrencyPipeFormat(formatedNumber){
return formatedNumber.replace(/[$,]/g,"")
}
Y eliminando los otros valores no numéricos.
validateOnlyNumbers(evt) {
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode( key );
var regex = /[0-9]|\./;
if( !regex.test(key) ) {
theEvent.returnValue = false;
if(theEvent.preventDefault) theEvent.preventDefault();
}
item.value
es un número, y lo usaDatePipe
para convertirlo en una cadena de fecha. Cuando se edita la fecha,$event
también será una cadena de fecha y no se ajustará de nuevo.item.value
Debe invertir lo que hizo la tubería en su(ngModelChange)
expresión, es decir, volver la cadena de fecha a un número.(ngModelChange)="updateItemValue($event)"
, luego cree unupdateItemValue(date: string)
método y dentro de él.item.value = someConversionFunction(date);
Ahora, si pregunta qué debe usar como función de conversión, no lo sé. QuizásDate.parse()
podría funcionar.