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

Я обновляю значение поля при размытии, превращая его в значение валюты при размытии. Когда я ввожу свое значение и оставляю 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);
  }
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
638
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

В этом есть смысл, и это то, что я предпочитаю, я просто подумал, что patchValue и setValue в конечном итоге изменят фактическое значение.

Pari Baker 22.10.2018 21:03

Поэтому я бы просто применил ту же логику при отправке

Pari Baker 22.10.2018 21:08

Если вы хотите изменить сам объект (данные), вы должны сделать это явно.

alokstar 22.10.2018 21:21

Да, но разве сам patchValue не изменяет значение моего formControl?

Pari Baker 22.10.2018 21:25

Я могу ошибаться, но я думаю, что вы запутались между привязкой данных и форматированием данных на стороне клиента. Когда вы применяете канал (патч), вы фактически не изменяете данные. я ответил на ваш вопрос или я ошибся?

alokstar 22.10.2018 21:29

Не уверен, tbh, я использовал валютный канал для изменения данных на моей стороне клиента в качестве маски ввода, затем я использовал patchValue, чтобы установить его значение, когда пользователь нажимает кнопку отправки, я хочу, чтобы форма отправлялась с новым значением в момент i Я просто задаю значение console.info, но, очевидно, я добавлю логику для кода на стороне сервера. Для подтверждения, прежде чем я приму ответ, patchValue фактически не изменяет физическое значение formControl?

Pari Baker 22.10.2018 21:33

Этого не должно быть, formControl просто связывает значение, а pipe просто форматирует его. Лучший способ проверить это, вы можете напрямую попробовать console.info свои атрибуты formControl.

alokstar 22.10.2018 21:38

Другие вопросы по теме