This question is about restricting/validating the input when the user enters data into an input of type number.
The issue I have is that when the model first loads, any numbers that are integers or 1dp, get rendered with only 1dp. eg 40 or 40.0 both show as 40.0 (not as 40.00).
I have added this code so that after a user types a new value, it shows with 2dp:
in the template file:
(change)="setTwoNumberDecimal($event)"
in the component file:
setTwoNumberDecimal($event) {
$event.target.value = parseFloat($event.target.value).toFixed(2);
}
This works to show 2dp after the user changes the value.
I tried to write a directive that should format to 2dp when the data initially loads, but although the directive does fire, it does not change the value to 2dp.
import { Directive, ElementRef, Input, Renderer2 } from '@angular/core';
@Directive ({
selector: '[fbDecimalFormat]'
})
export class DecimalFormatDirective {
constructor(private el: ElementRef,
private renderer: Renderer2) {
//renderer.setAttribute(el, 'value', parseFloat(el.nativeElement.value).toFixed(2));
this.el.nativeElement.value = parseFloat(this.el.nativeElement.value).toFixed(2);
}
}
FYI the commented render line did not work (error: setAttribute not recognised) - it was an attempt to be platform independent.
So the question is: How can I get the input to render its initial value with 2dps?
{{form.get('name').value | myPipe}}
but I think the correct way is to use value accessor. More info here: https://stackoverflow.com/questions/40637453/applying-a-pipe-or-transform-to-a-reactive-form-value – rmcsharry Jan 03 '18 at 16:23