【问题标题】:Multiple child component inside form - Angular 2表单内的多个子组件 - Angular 2
【发布时间】:2017-07-01 09:13:16
【问题描述】:

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

ma​​inform.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>

ma​​inform.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

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

【问题讨论】:

  • 看起来子组件中的字段无法访问其父组件formGroup。您是否在子组件中使用了 formGroup 指令?你能显示其中之一的 HTML 吗?

标签: angular angular2-forms angular2-directives


【解决方案1】:

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

您父级中用户帐户的子组:

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

所以,父组件中相关的子组件标签应该是这样的:

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

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

@Input() useraccount: FormGroup;

模板可能如下所示:

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

工作sample

【讨论】:

  • @RED.Skull 我们如何将这个子值访问到我的父表单组中。通过formDetail.value 可以在父窗体中访问子控件中的任何更改吗?
  • @PraveenRawat 当您对我的回答发表评论时收到通知,所以我不妨回答您。正如您在我制作的 Plunker 中看到的那样,这些值可以在 parent 中访问。对象在 JS 中是可变的,因此它们是通过引用传递的,因此您的父级会获取子级中所做的所有更改。
  • @AJT_82 我们是否也可以在子级中为用户帐户添加动态控件并在父级中访问它?
猜你喜欢
  • 2017-03-03
  • 2017-02-15
  • 2017-08-12
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 2018-06-07
  • 2016-08-09
  • 1970-01-01
相关资源
最近更新 更多