angular 6 patchValue обновляет значение, но не при отправке?

1

Я обновляю значение поля при размывании, превращая его в значение валюты при размытии. Когда я набираю свое значение и оставляю formcontrol, обновление на blur работает и делает значение (20.00) (20,00 долларов США) или (20,05060) до (20,00 долларов США), однако, когда я нажимаю кнопку сгенерированной формы, console.logs имеет значение, поскольку оно перед моим 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.log(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.log(this.invoiceGeneratorForm.value);
  }
}
Теги:
angular
angular6

1 ответ

2
Лучший ответ

Это ожидается. Вы используете каналы, которые изменяют ваши данные на стороне клиента и не изменяют фактическое значение данных. Трубы используются для обработки данных. Прочтите https://angular.io/guide/pipes, который может дать вам более подробную информацию.

  • 0
    Это имеет смысл, и это то, что я предпочитаю, я просто подумал, что patchValue и setValue в конечном итоге изменят фактическое значение.
  • 0
    Так что я бы просто применить ту же логику при отправке
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню