Angular FormArray 插入
Angular FormArray Insert
我正在尝试使用 insert() 更新 formArray 上的特定值。
我像这样在 ngOninit() 上初始化表单:
this.myForm = this.fb.group({
exercises: this.fb.array([]),
type: new FormControl(),
day: new FormControl(),
sets: this.fb.array([]),
reps: this.fb.array([]),
});
我有一个输入,在更改时我调用了下面的函数,但是当我尝试用数组的索引插入一个新值时,我得到了推送的值。
onSetsChange(sets, index){
var setsFormArray = <FormArray>this.myForm.controls.sets;
setsFormArray.insert(index, new FormControl(sets));
}
html代码如下:
<div class="col-md-3">
<select class="form-control input-sm" (change)="onSetsChange($event.target.value, exerciseIndex)">
<option *ngFor="let set of sets; let i = index;">{{set}}</option>
</select>
</div>
我传递的 exerciseIndex 来自一个没有显示的循环。
我做错了什么,它没有更新值?谢谢
尝试使用 patchValue
:-
public ngOnInit() {
const arr = new FormArray([
new FormControl(),
new FormControl()
]);
let control = arr.controls[0];
setTimeout(() => control.patchValue("new-val"), 250); // Set value to "new-val"
setTimeout(() => console.log(control.value), 350); // Logs "new-val"
}
onSetsChange(sets, index){
var setsFormArray = <FormArray>this.myForm.controls.sets;
(setsFormArray.at(index)).patchValue(sets);
console.log(index);
console.log(setsFormArray);
}
这是我想出的第二个答案。谢谢
我正在尝试使用 insert() 更新 formArray 上的特定值。 我像这样在 ngOninit() 上初始化表单:
this.myForm = this.fb.group({
exercises: this.fb.array([]),
type: new FormControl(),
day: new FormControl(),
sets: this.fb.array([]),
reps: this.fb.array([]),
});
我有一个输入,在更改时我调用了下面的函数,但是当我尝试用数组的索引插入一个新值时,我得到了推送的值。
onSetsChange(sets, index){
var setsFormArray = <FormArray>this.myForm.controls.sets;
setsFormArray.insert(index, new FormControl(sets));
}
html代码如下:
<div class="col-md-3">
<select class="form-control input-sm" (change)="onSetsChange($event.target.value, exerciseIndex)">
<option *ngFor="let set of sets; let i = index;">{{set}}</option>
</select>
</div>
我传递的 exerciseIndex 来自一个没有显示的循环。
我做错了什么,它没有更新值?谢谢
尝试使用 patchValue
:-
public ngOnInit() {
const arr = new FormArray([
new FormControl(),
new FormControl()
]);
let control = arr.controls[0];
setTimeout(() => control.patchValue("new-val"), 250); // Set value to "new-val"
setTimeout(() => console.log(control.value), 350); // Logs "new-val"
}
onSetsChange(sets, index){
var setsFormArray = <FormArray>this.myForm.controls.sets;
(setsFormArray.at(index)).patchValue(sets);
console.log(index);
console.log(setsFormArray);
}
这是我想出的第二个答案。谢谢