【问题标题】:change input value angular 5更改输入值角度 5
【发布时间】:2018-05-07 10:04:28
【问题描述】:

请问,您能否建议我在更改值时如何提交我的值?因此,我想在更改此值时提交amount_paid。为了解决这个问题,我创建了一个返回值的函数更改。这个值我需要提交。我试过这段代码:

模板代码:

 <div class="input-field col s2" style="float: right;">
      <label for="amount_paid">Amount Paid:</label>
      <input id="amount_paid" [value]="amountpaid" type="number" class="validate" (change)="updateForm($event)">
 </div>

Ts 代码:

    this.addsale = this.fb.group({
      'invoice_number': new FormControl('', [Validators.required, Validators.nullValidator]),
      'client_id': new FormControl('', Validators.required),
      'amount_paid': new FormControl('', Validators.required),
      'products': this.fb.array([]),
    });

  updateForm(ev: any) {
    this.addsale['controls']['amount_paid'].setValue(ev.target.value);
    console.log(ev.target.value)
  }

  onaddsale() {
    let sale = this.addsale.value;
    sale.amount_paid = this.amountpaid; //I used this, because I want to submit this value If I don't want to change. 
    let newSale = new Sale(sale);
    console.log(newSale)
    console.log(this.addsale.controls.amount_paid.value) // Value input when I chane
   }

  get amountpaid() {
    return this.products
      .map(p => p.p_Unit_price * p.p_Quantity)
      .reduce((a, b) => a + b, 0);
  }

请我有 2 种情况,1,我提交值输入,例如 100。这工作正常。和 2. 当我改变这个值时我提交输入值,所以,从 100 我想改变 90,这个 90 我想提交。我的函数也提交了第一个值sale.amount_paid = this.amountpaid;

更新: demo 我的问题示例

问题是,amount_paid 字段应该被修改,并且修改后的值应该被保留。如何修改我的值?我要字段二绑定,如果不能改,提交get amountpaid() {},否则提交我的值输入。

Image 1 我保存表单而不更改值。 图 2 我使用更改后的值保存表单,但值没有更改。在控制台中显示。

【问题讨论】:

  • 不要将 [value] 属性与 formcontrolName 混用

标签: angular typescript angular5 onchange


【解决方案1】:

两件事:

  1. amount_paid 模板应如下所示:

&lt;input formControlName="amount_paid" id="amount_paid" type="number" class="validate"&gt;

  1. 在 .ts 中:

    this.addsale.controls['amount_paid'].valueChanges.subscribe(value => { amount_paid is in value and it's called every time the value changes. });

或整个表格:

this.addsale.valueChanges.subscribe(value => {
    // whole form object is in value and it's called every time any form field changes.
});

根据 cmets 和您的示例进行编辑: 这是working solution。至少我希望这次我能正确理解你。

【讨论】:

  • 我使用了[value]="amountpaid",因为这个get amountpaid() {}的返回值
  • 你不必这样做,你应该这样做。您可以像在代码中的某处那样做:this.addsale['controls']['amount_paid'].setValue(ev.target.value); 您正在结合模板驱动表单和响应式表单模式。这是一个不好的方法。使用其中一种。
  • 拜托,我不明白,如何计算我的amountpaid()?如果我写得像你的答案,对我来说不会显示输入。在这篇stackoverflow.com/questions/50175365/… 的帖子中,我展示了我所有的代码,只是在这个我有不同的问题。请再看一遍。谢谢
  • 我不明白你需要什么。你能试着更好地描述一下吗?
  • 我正在创建一张发票,在这张发票中决定了所有产品、价格、数量、名称等。产品数量由函数get amountpaid () {} 计算。到目前为止,它运作良好。在这种情况下,我必须让这个值可以改变,以防需要。在我的代码中,未保存更改的值。请试试这个例子stackblitz.com/edit/angular-arvwvn?file=app/hello.component.ts
猜你喜欢
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 2016-02-22
相关资源
最近更新 更多