【问题标题】:angular 6 patchValue updates the value but not when I submit?angular 6 patchValue 更新值但在我提交时不更新?
【发布时间】:2018-10-22 18:55:07
【问题描述】:

我正在更新模糊上的字段值,使其成为模糊上的货币值。当我输入我的值并离开表单控件时,模糊更新工作并使值 (20.00) 变为 ($20.00) 或 (20.05060) 变为 ($20.00) 但是当我单击生成表单按钮时它控制台.记录值原样在我的补丁值之前。我该如何解决?

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);
  }
}

【问题讨论】:

    标签: javascript angular angular6


    【解决方案1】:

    这是意料之中的。您正在使用在客户端修改数据并且不更改数据的实际值的管道。管道用于处理数据。请阅读https://angular.io/guide/pipes,这可能会为您提供更多详细信息。

    【讨论】:

    • 有道理,也是我喜欢的,我只是觉得patchValue和setValue最终会改变实际值。
    • 所以我会在提交时应用相同的逻辑
    • 如果你想改变对象(数据)本身,那么你必须明确地去做。
    • 是的,但 patchValue 本身不会改变我的 formControl 的值吗?
    • 我可能是错的,但我认为您对数据绑定和客户端数据格式感到困惑。当您应用管道(补丁)时,您实际上并没有修改数据。是我回答了你的问题还是我弄错了?
    猜你喜欢
    • 2018-12-25
    • 2019-12-18
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    相关资源
    最近更新 更多