使用angular2在嵌套表单控件中修补值
patch Value in a nested form control using angular2
我需要在 FormBuiler 的嵌套控件中设置一个值,模型如下:
this.addAccForm = this.fb.group({
accid: ['', Validators.required],
status: '',
cyc: this.fb.array([
this.initCyc(),
])
})
initCyc() {
return this.fb.group({
cycid: ['', Validators.required],
name: ['', Validators.required],
description: ['', Validators.required],
status: ['', Validators.required],
det: this.fb.group({
dcycid: ['', Validators.required],
status: ['', Validators.required]
})
})
我需要设置一个值 cycid 和 dcycid,但我坚持这样做,我尝试使用以下行,但它没有帮助:
this.addAccForm.patchValue({cyc: { [0]: {cycid: 1234567 }}});
//
this.addAccForm.patchValue({cyc: { [0]: { det : {dcycid: 9876543}}}});
知道应该怎么做吗?
尝试使用这些代码
this.addAccForm.patchValue({cyc: {cycid: 1234567 }});
this.addAccForm.patchValue({cyc: { det : {dcycid: 9876543}}});
另一个解决方案是:
(< FormGroup >this.addAccForm.controls['cyc']).controls['cycid'].patchValue('1234567');
(< FormGroup >this.addAccForm.controls['cyc']).controls['det'].controls['dcycid'].patchValue('1234567');
这是我解决问题的方法:
(this.addAccForm.controls['cyc'].at(0)).patchValue({cycid: 12345 });
//
(this.addAccForm.controls['cyc'].at(0)).controls['det'].at(0).patchValue({dcycid: 9876543});
谢谢
这对我有用:
this.addAccForm.patchValue({'cyc': {cycid: 1234567 }});
显然,这是一个较旧的条目,但这就是我处理类似情况的方式
this.addAccForm.controls['cyc']['controls'][index].patchValue({cycid: '100'})
这样的语法对我来说似乎更清晰。然而,一种相当简单的方法是首先简单地输出 form.controls 。这样您就可以在控制台中看到您的表单由什么组成,基本上只是观察它的结构。
这是为我工作的代码。
我正在使用 Angular 版本 "^6.0.0"
var formArray = this.addAccForm.get("cyc") as FormArray;
formArray.at(0)["controls"]["cycid"].patchValue("Value that you want to pass");
定义一个FormGroup
来保存一个表单。
addAccForm: FormGroup
使用 FormBuilder
创建表单。
this.addAccForm = this.fb.group({
accid: ['', Validators.required],
status: '',
cyc: this.fb.array([])
})
现在创建一个方法来修补表单值。您可以将模型作为参数传递给方法。或者在组件 class.
中定义的变量
// GETER TO RETRIEVE THE CYC FORMARRAY
get cycFormArray(): FormArray {
return this.addAccForm.get('cyc') as FormArray;
}
patchForm(model: any) {
this.addAccForm.patchValue({
accid: [model.accid, Validators.required],
status: model.status,
});
// PASS ARRAY TO PATCH FORM ARRAY
this.patchCyc(model.cyc);
}
// METHOD TO PATCH FORM ARRAY
patchCyc(cycArray: any[]) {
cycArray.forEach(item => {
this.cycFormArray.push({
this.fb.group({
prop1: item.prop1,
prop2: item.prop2,
...
})
})
})
}
patchCyc()
方法将遍历作为参数传递的数组。在每个循环中,一个新的 FormGroup
将被推送到 cyc FormArray
。
更新
使用 get
方法更新 Angular FormGroup
的嵌套字段看起来更清晰,如下所示:
this.addAccForm.get('cyc.det.dcycid').patchValue(9876543);
如果出于某种原因您喜欢对象语法:
this.addAccForm.get('cyc.det').patchValue({ dcycid: 9876543 });
嵌套形式的补丁值你需要像这样在对象之后使用数组:
this.userform.patchvalue({
name: 'Ajay',
approvers: [ {id:1} ]
})
我需要在 FormBuiler 的嵌套控件中设置一个值,模型如下:
this.addAccForm = this.fb.group({
accid: ['', Validators.required],
status: '',
cyc: this.fb.array([
this.initCyc(),
])
})
initCyc() {
return this.fb.group({
cycid: ['', Validators.required],
name: ['', Validators.required],
description: ['', Validators.required],
status: ['', Validators.required],
det: this.fb.group({
dcycid: ['', Validators.required],
status: ['', Validators.required]
})
})
我需要设置一个值 cycid 和 dcycid,但我坚持这样做,我尝试使用以下行,但它没有帮助:
this.addAccForm.patchValue({cyc: { [0]: {cycid: 1234567 }}});
//
this.addAccForm.patchValue({cyc: { [0]: { det : {dcycid: 9876543}}}});
知道应该怎么做吗?
尝试使用这些代码
this.addAccForm.patchValue({cyc: {cycid: 1234567 }});
this.addAccForm.patchValue({cyc: { det : {dcycid: 9876543}}});
另一个解决方案是:
(< FormGroup >this.addAccForm.controls['cyc']).controls['cycid'].patchValue('1234567');
(< FormGroup >this.addAccForm.controls['cyc']).controls['det'].controls['dcycid'].patchValue('1234567');
这是我解决问题的方法:
(this.addAccForm.controls['cyc'].at(0)).patchValue({cycid: 12345 });
//
(this.addAccForm.controls['cyc'].at(0)).controls['det'].at(0).patchValue({dcycid: 9876543});
谢谢
这对我有用:
this.addAccForm.patchValue({'cyc': {cycid: 1234567 }});
显然,这是一个较旧的条目,但这就是我处理类似情况的方式
this.addAccForm.controls['cyc']['controls'][index].patchValue({cycid: '100'})
这样的语法对我来说似乎更清晰。然而,一种相当简单的方法是首先简单地输出 form.controls 。这样您就可以在控制台中看到您的表单由什么组成,基本上只是观察它的结构。
这是为我工作的代码。
我正在使用 Angular 版本 "^6.0.0"
var formArray = this.addAccForm.get("cyc") as FormArray;
formArray.at(0)["controls"]["cycid"].patchValue("Value that you want to pass");
定义一个FormGroup
来保存一个表单。
addAccForm: FormGroup
使用 FormBuilder
创建表单。
this.addAccForm = this.fb.group({
accid: ['', Validators.required],
status: '',
cyc: this.fb.array([])
})
现在创建一个方法来修补表单值。您可以将模型作为参数传递给方法。或者在组件 class.
中定义的变量// GETER TO RETRIEVE THE CYC FORMARRAY
get cycFormArray(): FormArray {
return this.addAccForm.get('cyc') as FormArray;
}
patchForm(model: any) {
this.addAccForm.patchValue({
accid: [model.accid, Validators.required],
status: model.status,
});
// PASS ARRAY TO PATCH FORM ARRAY
this.patchCyc(model.cyc);
}
// METHOD TO PATCH FORM ARRAY
patchCyc(cycArray: any[]) {
cycArray.forEach(item => {
this.cycFormArray.push({
this.fb.group({
prop1: item.prop1,
prop2: item.prop2,
...
})
})
})
}
patchCyc()
方法将遍历作为参数传递的数组。在每个循环中,一个新的 FormGroup
将被推送到 cyc FormArray
。
更新
使用 get
方法更新 Angular FormGroup
的嵌套字段看起来更清晰,如下所示:
this.addAccForm.get('cyc.det.dcycid').patchValue(9876543);
如果出于某种原因您喜欢对象语法:
this.addAccForm.get('cyc.det').patchValue({ dcycid: 9876543 });
嵌套形式的补丁值你需要像这样在对象之后使用数组:
this.userform.patchvalue({
name: 'Ajay',
approvers: [ {id:1} ]
})