Я не могу предоставить ввод значений при использовании (изменить) - PullRequest
0 голосов
/ 08 мая 2018

В моем проекте я хочу создать счет. В этом счете я вычисляю значение с помощью функции get subtotal(){}, которая хорошо работает. Теперь, если я, например, изменю этот промежуточный итог, я хочу сделать скидку от 100 до 90.

Я пробовал этот код, но он не работает. Подскажите пожалуйста, как решить эту проблему? HTML-код:

  <div class="input-field col s2" style="float: right;">
      <input formControlName="Subtotal " id="Subtotal " [value]="subtotal " type="number" class="validate" (change)="updateForm($event)">
    </div>

код ts:

  updateForm(event) {
    console.log(event)
    let amountpaidd = event.target.value
     this.addsale['controls']['Subtotal '].setValue(amountpaidd );
   }
  onaddsale() {
    let sale = this.addsale.value;
    sale.Subtotal = this.subtotal;
    let newSale = new Sale(sale);
    console.log(newSale)}

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

Спасибо!

Обновление:

this.addsale = this.formbuilder.group({
      'Subtotal ': new FormControl('', Validators.required),
      'products': this.formbuilder.array([]),
    });

1 Ответ

0 голосов
/ 10 мая 2018

Если вам нужно предварительно рассчитать значение, просто установите значение элемента управления. Не используйте представление (HTML) для передачи значения туда и обратно.

Сначала создайте форму, используя конструктор форм.

Затем установите значение из промежуточной суммы, используя this.addSale.controls.Subtotal.setValue(this.subtotal). Делайте это всякий раз, когда изменяется промежуточный итог.

ngOnInit() {
  this.service.productList.subscribe(productList => {
    this.products = productList;
    this.addsale.controls.Subtotal.setValue(this.subtotal)
  });
}

Не не использовать sale.Subtotal = this.subtotal.

let sale = this.addsale.value уже делает это.

по вашему мнению, используйте базовую реактивную форму привязки.

 <input formControlName="Subtotal" id="Subtotal" type="number" class="validate">

Ваше значение должно обновляться всякий раз, когда вы вызываете setValue(this.subtotal)

Пользователь может перезаписать значение курса. Но это может быть перезаписано, если вы добавите больше продуктов или около того. Если вы хотите предотвратить это, вы должны следить за тем, сделал ли пользователь это, и больше не обновлять значение новым промежуточным итогом.

Рабочая демонстрация на основе демонстрации, предоставленной вами в комментарии.

...