1
this.myForm = fb.group({ 
     name: ['', [Validators.required, Validators.minLength(2)]], 
     date: ['', [Validators.required, Validators.minLength(2)]], 
     address: ['', [Validators.required, Validators.minLength(2)]], 
     , 
     items: fb.array([ 
      this.initItem(), 
     ]) 
    }); 

initItem() { 
    return this.fb.group({ 
     item: [''], 
     itemType: [''], 
     amount: [''], 
     presentRate:this.myForm, 
     total:[''] 
    }); 

При отправке формы это свойство объекта будет храниться объектом. Пример объекта:Как обновить значения formControl автоматически из других значений formControl в реактивных формах угловых 2?

item{ 
    itemName:"name", 
    itemRate:1000,...} 

Как я могу использовать свойства объекта элемента и латать значения в моих initItem() свойства Methord Мой сценарий, как, когда пользователь выбирает значение из выпадающего списка, элемент будет обновляться и я хотел бы отобразить значения, полученные из элемента в других формах управления. Пример:

<div *ngFor="let item of myForm.controls.items.controls; let i=index"> 
      <div [formGroupName]="i"> 
      <md2-autocomplete [items]="products" 
         item-text="product" 
         (change)="handleChange($event)" 
         placeholder="Product purchased" 
         formControlName="item" 
         > 
      </md2-autocomplete> 
      <md-input-container > 
       <input md-input placeholder="Present rate" [value]="presentRate" formControlName="presentRate" > 
      </md-input-container> 

Я хотел бы автоматически обновлять значения на поле ввода presentRate.

ответ

2

Я предполагаю, что вы пытаетесь обновить значение для каждого presentRate на основе выбранного значения в md2-autocomplete. Если я правильно должно работать:

Шаблон:

(change)="handleChange($event, i)" 

Компонент:

handleChange($event: any, i: index) { 
    const control: AbstractControl = myForm.get(`items.${i}.presentRate`); 
    let newVal: any; 

    if ($event.value) { 
    newVal = $event.value.rate; 
    } else { 
    newVal = ''; 
    } 

    control.patchValue(newVal); 
} 
+0

'handleChange ($ событие: любой, я: индекс) { управления Const: AbstractControl = this.myForm.get; (' пункты $ {я} .presentRate'.) control.patchValue ($ event.value.rate); 'Мне понравилось это, и оно работает, но я получаю сообщение об ошибке при изменении значения из раскрывающегося списка. –

+0

ОРИГИНАЛЬНОЕ ИСКЛЮЧЕНИЕ: Невозможно прочитать значение 'rate' от null –

+0

. Это проблема с md2-autocomplete? –

3

Вы можете подписаться на valueChanges элемента управления формы и вызвать updateValueAndValidity на другой контроль формы.

this.myForm.get('myControlName').valueChanges 
.subscribe(val => 
    this.myForm.get('myOtherControlName').updateValueAndValidity(val) 
); 
+0

Спасибо за ваш ответ. Но как можно получить доступ к формеControl в formArray? –

+0

'this.myForm.get ('myOtherControlName.3.inArray')' получает второй элемент управления 'inArray' в массиве' myOtherControlName'. –

+0

'initItem() { возврата this.fb.group ({ пункт: [ ''], ItemType: [ ''], количество: [ ''], presentRate: this.this.myForm.get ('myOtherControlName.3.inArray'), всего: [''] }); 'это правильно? –

 Смежные вопросы

  • Нет связанных вопросов^_^