Angular2 patchValue push значение в массив
Это похоже на Angular2's FormGroup.patchValue () не помещает новые элементы в массив.
например что-то вроде этого:
ngOnInit() {
this.form = this.formBuilder.group({
animal: [''],
school: this.formBuilder.group({
name: [''],
}),
students: this.formBuilder.array([this.formBuilder.control('Bob')])
});
setTimeout(() => this.form.patchValue({
animal: 'cat'
school : {name: 'Fraser'},
students: ['Bob gets edited', 'This will not show']
}), 250);
}
только обновление первый элемент в "студенты", но это не будет вставить второй элемент.
что мне нужно сделать, чтобы отобразить оба элемента?
4 ответов
.patchValue()
только обновляет существующие FormArray
, это не изменит структуру вашей модели формы.
patchValue (значение: any[], {onlySelf, emitEvent}?: {onlySelf?: логический, эмитевент?: boolean}): void исправляет значение FormArray. Он принимает массив, соответствующий структуре элемента управления, и будет сделайте все возможное, чтобы соответствовать значениям правильных элементов управления в группе.
Он принимает как супер-наборы, так и подмножества массива без метание ошибка.
вам нужно пуш новый элемент в массиве, чтобы он появился.
this.form.controls['students'].push(new FormControl('This will not show'));
Это все FormArray
документация https://angular.io/docs/ts/latest/api/forms/index/FormArray-class.html
Ну, как сказал silentsod, это невозможно. В настоящее время я использую ниже в качестве альтернативы:
let controlArray = <FormArray>this.form.controls['apps'];
this.list.forEach(app => {
const fb = this.buildGroup();
fb.patchValue(app);
controlArray.push(fb);
});
Angular Team-нам нужна новая функция, такая как PatchArray (), которая будет исправлена из графа коллекции/объекта. Это базовый вариант использования.
Ну, решение я нашел такое:
this.myForm.controls['array'] = this.formBuilder.array(newArray.map(i => this.formBuilder.group(i)));
Я надеюсь, что это поможет вам. У меня есть сложный объект, где мой объект имеет объект внутри и объект внутри. извините за грамматику. но я надеюсь, что мой код поможет вам
ngOnInit() {
this.descriptifForm = this._fb.group({
name: 'ad',
descriptifs: this._fb.array([ this.buildForm() ]),
});
this._service.getData().subscribe(res => {
this.descriptifForm.setControl('descriptifs', this._fb.array(res || []));
});
}
buildA(): FormGroup {
return this._fb.group({
Id: '',
Groups: this._fb.array([ this.buildB() ]),
Title: ''
});
}
buildB(): FormGroup {
return this._fb.group({
Id: '',
Fields: this._fb.array([ this.bbuildC() ]),
Type: ''
});
}
buildC(): FormGroup {
return this._fb.group({
Answers: this._fb.array([ this.buildD() ]),
Code: '',
});
}
buildD(): FormGroup {
return this._fb.group({
Data: ''
});
}