Angular 如何在窗体数组中修补值
我使用的是Angular8和反应形式。我的建议是:Angular 如何在窗体数组中修补值,angular,angular-material,angular8,angular-reactive-forms,angular-forms,Angular,Angular Material,Angular8,Angular Reactive Forms,Angular Forms,我使用的是Angular8和反应形式。我的建议是: ngOnInit():void{ this.makeForm=this.fb.group( 年份:['',验证者。必填], 金额:['',需要验证人], 描述:['',需要验证程序], 详情:新形式([ this.det(), ] ); } det(){ 返回新表单组({ 对于:新表单控件(“”), 备注:新表单控件(“”) }); } 我有来自后端的数据来修补阵列: { “金额”:9000, “年份”:1996年, “id”:1, “描述”
ngOnInit():void{
this.makeForm=this.fb.group(
年份:['',验证者。必填],
金额:['',需要验证人],
描述:['',需要验证程序],
详情:新形式([
this.det(),
]
);
}
det(){
返回新表单组({
对于:新表单控件(“”),
备注:新表单控件(“”)
});
}
我有来自后端的数据来修补阵列:
{
“金额”:9000,
“年份”:1996年,
“id”:1,
“描述”:“P1”,
“详情”:[
{
“id”:1,
“备注”:“ok”,
“请求者”:“1”
},
{
“id”:24,
“备注”:“OK”,
“请求者”:“1”
},
{
“id”:25,
“备注”:“OK”,
“请求者”:“1”
}
]
}
我通常使用此方法修补值:
getppredit(){
let data:any=this.shareService.ParentShare.value;
设id=data.id;
this.dataService.getdataEdit(id)
.订阅((结果:任意)=>{
设no=result.no;
让year=result.year;
此.makeForm.patchValue({
不:不,,
年份:年份
});
});
}
上面的代码用于普通修补程序,但是如何使用Angular8的反应式表单动态修补数组中的值?请在此处尝试此代码
getppredit(){
let data:any = this.shareService.ParentShare.value
let id = data.id
this.dataService.getdataEdit(id)
.subscribe((result: any) => {
let no = result.no;
let year= result.year
this.makeForm.patchValue({
no : no,
year: year
})
//initialize empty array
this.getFormArray() = new FormArray([]);
//create needed formGroups and inside each formGroup all formControls
for (let detail of result.details) {
let idControl: FormControl = new FormControl('');
let requestForControl: FormControl = new FormControl('');
let remarkControl: FormControl = new FormControl('');
idControl.setValue(detail.id);
ForControl.setValue(detail.requestFor);
remarkControl.setValue(detail.remark);
this.getFormArray().push(new FormGroup({
id: idControl,
For: requestForControl,
remark: remarkControl}));
}
})//end of subscribe
}
getFormArray(): FormArray{
return this.makeForm.get('details') as FormArray;
}
表单数组通常具有动态数据。因此,必须首先在表单数组中创建动态表单控件(在收到响应后)然后将值放入其中。下面是我使用的方法,它跟踪FormControl、FormGroup或FormArray实例数组的值和有效性状态
导出类组件实现OnInit{
//用空数组初始化FormArray!
formArray:formArray=新的formArray([]);
makeForm:FormGroup;
恩戈尼尼特(){
this.makeForm=this.fb.group({
否:['',验证器。必需],
年份:['',验证者。必填],
});
}
getParEdit(){
...
this.dataService.getDataEdit(id).subscribe(结果=>{
const{no,year,details}=结果;
this.makeForm.patchValue({no,year});
如果(详细信息、长度){
details.forEach(details=>{
这是我的(
本集团({
id:newformcontrol({value:detail.id}),
requestFor:newformcontrol({value:detail.requestFor}),
备注:新FormControl({value:detail.remark}),
});
);
});
}
});
}
}
您可以为每个
详细信息
迭代动态创建表单组
,以及每个迭代中的表单控件
。如何检测此请求中的值更改?如何推送到existance array@PanagiwthsMpougioukos@Madhav现有数组可以使用array.push()
。请参阅我的答案above@Madhav您可以使用我在回答getFormArray()中使用的方法来获取对现有数组的引用,然后使用push来推送新数组element@Madhav如果希望getFormArray(),可以使用。push(dat())可以使用dat()但是,您要推送的表单将有空值,而不是json响应中的值。如果您想要有这些值,您必须查看我在回答中所做的操作如何在这个数组中推送值?det(){return new FormGroup({requestfor:new FormControl(“”),备注:new FormControl(“”),//文件\u id:new-FormControl('',})}如何在exist中推送价值array@Madhav不知道你想问什么。那不是一个数组,那是一个表单组
。我上面提供的示例演示了如何将表单组
推入表单组
。是的,我现在明白了,谢谢你,我从中学到了这一点