表单内的多个子组件 - Angular 2

Multiple child component inside form - Angular 2

我正在处理大表单,所以我计划将表单截断为多个子组件,这有助于轻松集成和维护。我正在尝试使用表单生成器来实现这一点。

mainform.html

    <form novalidate (ngSubmit)="onSubmit(formDetail);" [formGroup]="formDetail">
      <label>
        <span>Name</span>
          <input
          type="text"
          placeholder="Enter emp name"
          formControlName="name">
      </label>
      <app-userinfo></app-userinfo> <!-- Child component 1 -->
      <app-useracc></app-useracc> <!-- Child component 2 -->
    </form>

mainform.ts

export class MainformComponent implements OnInit {
  formDetail: FormGroup;
  constructor(private formBuilder: FormBuilder) { }

  ngOnInit() {
      this.formDetail= this.formBuilder.group({
        name:'',
      userinfo: this.formBuilder.group({
        userid: '',
        userph: ''
      }),
      useracc: this.formBuilder.group({
        useracc: '',
        usertransfer: ''
      })
    });
  }
  onSubmit(value:User){
    debugger;
  }
}

Console.log

formControlName must be used with a parent formGroup directive.  You'll want to add a formGroup

是否可以将嵌套表单组件作为单独的子组件?

您需要使用 Input() 并将子 FormGroup 传递给 child。我在这里稍微改变了一下,将组命名为 useraccount 而不是 useracc 以将控件与组分开:

您 parent 中用户帐户的子组:

  ...
  useraccount: this.formBuilder.group({
    useracc: '',
  })
  ...

因此,parent 中的相关 child 组件标记应如下所示:

<app-useracc [useraccount]="formDetail.controls.useraccount"></app-useracc>

然后在您的 child 组件中添加输入:

@Input() useraccount: FormGroup;

模板可能如下所示:

<div [formGroup]="useraccount">
  <input formControlName="useracc">
</div>

工作sample