Angular 如何在窗体数组中修补值

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, “描述”

我使用的是Angular8和反应形式。我的建议是:

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不知道你想问什么。那不是一个数组,那是一个
表单组
。我上面提供的示例演示了如何将
表单组
推入
表单组
。是的,我现在明白了,谢谢你,我从中学到了这一点