import { Directive } from '@angular/core';
import { NgModel } from '@angular/forms';
import { CurrencyPipe } from '@angular/common';
@Directive({
selector: '[ngModel][my-directive]',
providers: [NgModel, CurrencyPipe],
host: {
'(blur)': 'onInputChange($event)'
}
})
export class MyDirective {
constructor(private model: NgModel, private currencyPipe: CurrencyPipe) { }
onInputChange($event) {
var value = $event.target.value;
if (!value) return;
var plainNumber: number;
var formattedValue: string;
var decimalSeparatorIndex = value.lastIndexOf('.');
if (decimalSeparatorIndex > 0) {
// if input has decimal part
var wholeNumberPart = value.substring(0, decimalSeparatorIndex);
var decimalPart = value.substr(decimalSeparatorIndex + 1);
plainNumber = parseFloat(wholeNumberPart.replace(/[^\d]/g, '') + '.' + decimalPart)
} else {
// input does not have decimal part
plainNumber = parseFloat(value.replace(/[^\d]/g, ''));
}
if (!plainNumber) {
formattedValue = '';
}
else {
formattedValue = this.currencyPipe.transform(plainNumber.toFixed(2), "USD", "symbol-narrow");
}
this.model.valueAccessor.writeValue(formattedValue);
}
}
Then to use it on HTML part:
<input name="productPrice" [(ngModel)]="price" my-directive />

No comments:
Post a Comment