【发布时间】:2019-04-30 13:25:43
【问题描述】:
我正在尝试遍历 FormArray 设置值。对 javascript 相当陌生。
TeamWorkingDate 以下为Team FormArray 中的 7 个 FormGroup 中的每一个设置为相同的日期,并设置为循环中的最后一个,日期 + 7 天。
我尝试了许多 forEach 的变体,并回答了 @JavaScript closure inside loops – simple practical example,因为我相信这一定是一些关闭问题。
尽管阅读了这篇文章,但我对闭包的理解是有限的。在这种情况下 - setValue 是否可以访问函数调用之外的变量 i 并且“看到”i = 7 也是如此?我以为let 可以解决这个问题?
setDates(date: moment) {
var arr = [];
for(let i = 0; i < 7; i++) {
let nextDate = date.clone().add(i, 'day');
arr.push(nextDate);
(<FormArray>this.myForm.get('Teams')).controls[i]
.get('TeamWorkingDate').setValue(arr[i]);
}
}
我的表格:
ngOnInit() {
this.myForm = this.fb.group({
Teams: this.fb.array([])
});
const team = this.fb.group({
TeamWorkingDate: '',
...
})
for (let i = 0; i < 7; i++) {
(<FormArray>this.myForm.get('Teams')).push(team);
}
}
编辑:更改为 let nextDate = date.clone().add(i, 'day'); 而不是 var
【问题讨论】:
-
是的,
let停止了您正在谈论的问题,并且 IMK,setValue()不是异步调用,因此这不应该成为问题。您遇到的问题是什么,您能再解释一下吗,我没有得到问题。 -
我想将
TeamWorkingDate,FormArray 中的一个 FormGroup(7 个附加 OnInit)设置为date、date+1 day等,但我只是将此设置为date+7 days全部。 -
什么是
date.clone()?它真的给出一个 newDate 并且不修改现有日期吗? -
日期是一个时刻(可变),是的,克隆复制...momentjs.com/docs/#/parsing/moment-clone
-
@AndrewAllen 为什么要在formArray中推送同一个组?
标签: javascript angular closures