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

RED*_*ull 2 angular2-forms angular2-directives angular

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

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>
Run Code Online (Sandbox Code Playgroud)

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

CONSOLE.LOG

formControlName must be used with a parent formGroup directive.  You'll want to add a formGroup
Run Code Online (Sandbox Code Playgroud)

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

AJT*_*T82 12

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

您父项中useraccount的子组:

  ...
  useraccount: this.formBuilder.group({
    useracc: '',
  })
  ...
Run Code Online (Sandbox Code Playgroud)

因此,父级中的相关子组件标记应如下所示:

<app-useracc [useraccount]="formDetail.controls.useraccount"></app-useracc>
Run Code Online (Sandbox Code Playgroud)

然后在子组件中添加输入:

@Input() useraccount: FormGroup;
Run Code Online (Sandbox Code Playgroud)

和模板可能如下所示:

<div [formGroup]="useraccount">
  <input formControlName="useracc">
</div>
Run Code Online (Sandbox Code Playgroud)

工作样本

  • Legit刚从你的帖子中学到了如何做到这一点 (2认同)