2016-08-30 3 views
10

Моя форма код группы какКак обновить элементы управления FormArray

this.myForm = this._fb.group({    
      branch_name: ['', [Validators.required]], 
      branch_timing: this._fb.array([ 
       this.initBranchTiming(), 
      ])         
     }); 

initBranchTiming() {  
     return this._fb.group({ 
      day: ['', []], 
      open_from: ['00:00:00', []], 
      open_till: ['00:00:00', []]   
     }); 
    } 

branch_name обновляется этим кодом

(<FormControl>this.myForm.controls['branch_name']).updateValue(this.branch_detail.branch_name); 

Теперь я должен обновить «день» поле формы массива. что делать, чтобы обновить поле «день» в форме массива branch_timing?

ответ

-1

Не тестировался, но я предполагаю, что это должен делать то, что вы хотите:

this.myForm.get('branch_name.0.day') 
.setValue(this.branch_detail.branch_name); 
+0

Я получаю эту ошибку сборки Свойство getControl не существует в типе 'FormGroup'. – Mubashir

+0

Какая версия Angular2 вы используете? AFAIR это было изменено недавно и раньше называлось 'find()'. –

+0

Я использую RC4 версию и форма "@ angular/forms": "^ 0.2.0", – Mubashir

0

Это проверено и работает на угловых 2.0.0-rc.4 с @ угловой/формы 0.2.0:

(<FormControl>this.myForm.controls.branch_timing.controls[0].controls.day) 
    .updateValue('new value'); 

В версии, угловое 2.0.0 с @ угловым/образует 2.0.0, синтаксис был упрощен:

this.myForm.value.branch_name = this.branch_detail.branch_name; 

и

this.myForm.value.branch_timing[0].day = 'New Value'; 
4

AFAIK положить FormGroup внутри FormArray раздевает «FormControls» их имен и делает это просто список, как обычный массив.

Для того, чтобы обновить FormControls индивидуально, вы измените значение каждого AbstractControl из FormGroup с помощью индекса:

let index = 0; // or 1 or 2 
(<FormArray>this.myForm.controls['branch_timing']).at(index).patchValue('example'); 

Или вы можете обновить весь FormArray по телефону setValue или patchValue:

(<FormArray>this.myForm.controls['branch_timing']).setValue(['example', 'example1', 'example2']); 

setValue требует массив, который соответствует всей структуре или FormArray, а patchValue ca n принимает супер-набор или подмножество массива. (FormArray-class on Angular2's website)

+2

@Frederico P Лучший совет, который можно найти в Интернете для добавления в formArray! Тем не менее, мне нужно было это, чтобы заставить его работать: '( this.formName.get ('FormArrayName')). Push (новый FormControl ('НЕКОТОРНОЕ ЗНАЧЕНИЕ'));' – BenRacicot

+0

в случае, если вы хотите заменить день, например , Я сделал это следующим образом: ( this.myForm.controls ['branch_timing']). At (index) .get («день»). SetValue («222»); – Samuel

-2

Попробуй, надеюсь, что он будет работать для вас:

this.myForm.controls.splice(0);

+0

Извините, это ошибка –

+0

, вы должны уметь ее удалять. Найдите ссылку «удалить» под своим ответом –

0

Вы можете сделать это, просто создав новую FormControl:

this.form.setControl('items', new FormControl(arrayItemsValue)); 

Или по удаляя все предметы перед их обновлением:

const items = (<FormArray>this.form.get('items')); 
for (let i = 0; i < items.length; i++) { 
    items.removeAt(i); 
} 
this.form.get('items').setValue(arrayItemsValue); 
Смежные вопросы