Mam w angularze 2 formularz, w którym występują min. 4 pola (netValue - netto, quatity - ilość, vatRate - stawka VAT oraz grossValueAdded - suma brutto). Chciałbym móc na żywo modyfikować poszczególne elementy i widzieć zmianę w pozostałych (przykładowo edytując sumę brutto widzieć, że zmienia się cena netto i edytując cenę netto widzieć, że zmienia się suma brutto). Wymyśliłem, że będę reagował na zmiany tych pól jak poniżej, ale powoduje to w pewnych przypadkach pojawienie się błędu "Expression has changed after it was checked." Jak w takim przypadku sobie poradzić, żeby zmiany nie wywoływały kolejnych eventów?
this.subscriptionServiceItemForm.controls["netValue"].valueChanges
.subscribe((ngModelChange) => {
this.subscriptionServiceItem.grossValueAdded = (this.subscriptionServiceItem.netValue * this.subscriptionServiceItem.quantity) * (1 + (this.subscriptionServiceItem.vatRate / 100));
});
this.subscriptionServiceItemForm.controls["quantity"].valueChanges
.subscribe((ngModelChange) => {
this.subscriptionServiceItem.grossValueAdded = (this.subscriptionServiceItem.netValue * this.subscriptionServiceItem.quantity) * (1 + (this.subscriptionServiceItem.vatRate / 100));
});
this.subscriptionServiceItemForm.controls["vatRate"].valueChanges
.subscribe((ngModelChange) => {
this.subscriptionServiceItem.grossValueAdded = (this.subscriptionServiceItem.netValue * this.subscriptionServiceItem.quantity) * (1 + (this.subscriptionServiceItem.vatRate / 100));
});
this.subscriptionServiceItemForm.controls["grossValueAdded"].valueChanges
.subscribe((ngModelChange) => {
this.subscriptionServiceItem.netValue = this.subscriptionServiceItem.grossValueAdded / (1 + (this.subscriptionServiceItem.vatRate / 100)) / this.subscriptionServiceItem.quantity;
});