Да, эта часть немного сложнее.Кроме того, иногда вам нужно отобразить что-то, что не соответствует действительности.
Фактически лучшее решение, которое я нашел, - это создание собственного компонента (работающего с ngModel, см. О ControlValueAccessor) для моего ввода, и он выглядит как основа того, что вы пытаетесь сделать.
html:
<input [formControl]="inputFormControl" #myInput />
ts:
@ViewChild('myInput') inputElm: ElementRef;
formGroup: FormGroup;
value: number;
this.inputFormControl.valueChanges.subscribe((value: string) => {
if (value) {
const displayValue = ('' + value).replace(',', '.');
this.value = parseFloat(displayValue); // manage the value
this.inputFormControl.setValue(this.value, { emitEvent: false });
this.inputElm.nativeElement.value = new DecimalPipe(this.localId).transform(displayValue, '0.2-2'); //control the display
}
});
В каком-то смысле вы наверняка найдете его немного сложнее, но в конце это даст вам также больше контроля;)