Angular 被动形式:数组属性被转换为对象

Angular 被动形式:数组属性被转换为对象,angular,angular-forms,Angular,Angular Forms,这一问题可以从以下方面看出: 我有一个有效载荷: payload={ id:1, 名称:“这是有效负载”, 儿童:[ {id:1,名称:'Child 1'} ], }; 我从中创建了一个表单组: this.form=this.fb.group(this.payload); 然后显示窗体的值: {{form?.value | json} 结果是: {“id”:1,“name”:“这是有效负载”,“children”:{“id”:1,“name”:“child1”} 如您所见,childre

这一问题可以从以下方面看出:

我有一个有效载荷:

payload={
id:1,
名称:“这是有效负载”,
儿童:[
{id:1,名称:'Child 1'}
],
};
我从中创建了一个表单组:

this.form=this.fb.group(this.payload);
然后显示窗体的值:

{{form?.value | json}
结果是:

{“id”:1,“name”:“这是有效负载”,“children”:{“id”:1,“name”:“child1”}
如您所见,
children
属性从一个数组变为一个对象

  • 那是怎么发生的
  • 有可能阻止Angular这样做吗
  • 如果我需要使用formArray,有没有办法使其自动
    您应该声明数组的数组,因为组将数组作为参数[值,…验证器]:

    payload = {
        id: 1,
        name: 'This is the payload',
        children: [[
          { id: 1, name: 'Child 1' },
        ]],
      };
    
    要根据声明数组值,请执行以下操作:


    如果您想创建动态表单,请查看。

    谢谢,这就带来了一个问题,有没有一种方法可以从简单数组自动创建双数组(或
    fb.array
    )?或者我必须迭代每个属性并测试它是否是数组,然后将其更改为双数组吗?我在帖子中共享的angular.io链接解释说,对于动态表单,可以创建一个
    YourModelControlService
    ,将对象转换为表单组。在您的情况下,您需要确定它是否是数组,并在
    toFormGroup
    函数中使用
    fb.array
    。没有看到链接,谢谢!我现在要回家了,但我星期一回来的时候一定会看的。
    this.fb.group({
       anArray: [[]]
    });
    
    // OR
    this.fb.group({
       anArray: this.fb.array([])
    });
    
    // OR
    this.fb.group({
       anArray: new FormControl([])
    });