Я обновляю значение поля при размытии, превращая его в значение валюты при размытии. Когда я ввожу свое значение и оставляю formcontrol, обновление размытия работает и делает значение (20,00) до (20,00 долларов США) или (20,05060) до (20,00 долларов США), однако, когда я нажимаю кнопку создания формы, консоль. Регистрирует значение, как было перед моим patchValue. Как я могу это исправить?
export class InvoicesComponent implements OnInit {
invoiceGeneratorForm: FormGroup;
subtotalSub: Observable<any>;
subTotal = 0;
itemPriceCurrent: Observable<any>;
prices = [];
constructor(public fb: FormBuilder, private currencyPipe: CurrencyPipe) {}
ngOnInit() {
this.invoiceGeneratorForm = this.fb.group({
firstName: [""],
lastName: [""],
email: [""],
itemsArray: this.fb.array([this.getItems()]),
tax: [""],
subTotal: [{ value: this.subTotal, disabled: true }],
invoiceTotal: [""]
});
}
private pushCurrentPrice(index: number){
const control = <FormArray>this.invoiceGeneratorForm.controls["itemsArray"];
const currentControl= control.at(index)['controls']['itemPrice'];
const typeCheck = parseFloat(currentControl.value)||0;
const subFormatted = this.currencyPipe.transform(
typeCheck,
"USD",
"symbol-narrow",
"1.2-2"
);
currentControl.patchValue(subFormatted,{onlySelf: true, emitEvent: false});
console.info(currentControl);
}
private getItems() {
return this.fb.group({
itemName: ["", Validators.required],
itemPrice: [
"",
Validators.compose([
Validators.required
])
]
});
}
private addItemRow() {
const control = <FormArray>this.invoiceGeneratorForm.controls["itemsArray"];
control.push(this.getItems());
}
private deleteItemRow(index: number) {
const control = <FormArray>this.invoiceGeneratorForm.controls["itemsArray"];
control.removeAt(index++);
}
onGenerateForm() {
console.info(this.invoiceGeneratorForm.value);
}
}


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это ожидаемо. Вы используете каналы, которые изменяют ваши данные на стороне клиента и не меняют фактическое значение данных. Каналы используются для обработки данных. Пожалуйста, прочтите https://angular.io/guide/pipes, который может дать вам более подробную информацию.
Поэтому я бы просто применил ту же логику при отправке
Если вы хотите изменить сам объект (данные), вы должны сделать это явно.
Да, но разве сам patchValue не изменяет значение моего formControl?
Я могу ошибаться, но я думаю, что вы запутались между привязкой данных и форматированием данных на стороне клиента. Когда вы применяете канал (патч), вы фактически не изменяете данные. я ответил на ваш вопрос или я ошибся?
Не уверен, tbh, я использовал валютный канал для изменения данных на моей стороне клиента в качестве маски ввода, затем я использовал patchValue, чтобы установить его значение, когда пользователь нажимает кнопку отправки, я хочу, чтобы форма отправлялась с новым значением в момент i Я просто задаю значение console.info, но, очевидно, я добавлю логику для кода на стороне сервера. Для подтверждения, прежде чем я приму ответ, patchValue фактически не изменяет физическое значение formControl?
Этого не должно быть, formControl просто связывает значение, а pipe просто форматирует его. Лучший способ проверить это, вы можете напрямую попробовать console.info свои атрибуты formControl.
В этом есть смысл, и это то, что я предпочитаю, я просто подумал, что patchValue и setValue в конечном итоге изменят фактическое значение.