以编程方式设置表单的字段使表单无效

时间:2018-01-18 14:23:02

标签: angular ionic-framework angular-reactive-forms angular-forms

在Ionic 3 / Angular 5应用程序中,我有一个由3个字段组成的表单:

  • 名字(输入文字)
  • birthdate(日期时间选择器)
  • 头像(单选按钮)

如果表单无效,则会禁用提交按钮: [disabled]="!addChildForm.valid"

在初始时,我会检查用户是创建新孩子还是编辑新孩子。我编辑,我以编程方式填充字段。 这工作正常但提交按钮处于非活动状态。虽然生日是很好的填充,但我必须点击它才能打开(并关闭)选择器以启用提交按钮。

我的代码:

createForm(child?: Child): void {

      this.addChildForm = this.formBuilder.group({
        firstnameInput: ['', Validators.required],
        birthdateInput: ['', Validators.required],
        avatarInput: ['', Validators.required]
      });

      // If we are editing a child, populate the form
      if (child) {
        this.addChildForm.setValue({
          firstnameInput: child.firstname,
          birthdateInput: moment(child.birthdate).format(),
          avatarInput: child.avatar
        });
      }
    }

我知道如何在填写表单后以某种方式强制表单进行检查以启用提交按钮?

1 个答案:

答案 0 :(得分:1)

不是构建表单而然后用数据填充它,而是在构建步骤中进行检查并一次完成。像这样:

createForm(child?: Child): void {

  this.addChildForm = this.formBuilder.group({
    firstnameInput: [child ? child.firstname : '', Validators.required],
    birthdateInput: [child ? moment(child.birthdate).format() : '', Validators.required],
    avatarInput: [child ? child.avatar : '', Validators.required]
  });
}

以下是一个包​​含工作示例的链接:https://stackblitz.com/edit/angular-ygaoz7

尝试将示例中this.child的初始值更改为清空字符串,您将看到表单更改并且提交按钮被禁用。当它们都有值时,再次启用该按钮。