FormBuilder验证无法正常工作

时间:2018-05-03 03:23:04

标签: angular angular-reactive-forms angular-validation

我有这个实现FormBuilder的表单。

我需要在输入字段下显示我的自定义验证消息。使用下面的代码,只要输入字段为空,验证器就会显示红色的“错误”文本,但不显示我的自定义验证。

请参阅下面的代码.html.ts

<form [formGroup]="subscriptionForm">
      <h3 style="color: gray; text-align: center;">Registration</h3>
      <div class="row">
        <div class="col-md-6">
          <div class="md-form">
            <i class="fa fa-user prefix grey-text"></i>
            <input type="text" formControlName="UserName" name='UserName' id="UserName" class="form-control" mdbInputDirective>
            <label for="UserName">Your UserName</label>
            <div *ngIf="UserName?.invalid && (UserName?.dirty || UserName?.touched)" class="alert alert-danger">
              <div *ngIf="UserName?.errors.required">
                Username is required.
              </div>
            </div>
          </div>
        </div>
      </div>
</form>

constructor(private fb: FormBuilder) { }

  ngOnInit() {
    this.subscriptionForm = this.fb.group({
      UserName: [null, Validators.required],
    });
}

我已经浏览了Angular - Form验证文档,这是我获取代码的地方,但我无法做到正确。谢谢。

4 个答案:

答案 0 :(得分:2)

尝试更改

*ngIf="UserName?.invalid && (UserName?.dirty || UserName?.touched)"

*ngIf="subscriptionForm.get('UserName').hasError('required') && subscriptionForm.get('UserName').touched"

在视图中:

<div *ngIf="subscriptionForm.get('UserName').hasError('required') && subscriptionForm.get('UserName').touched" class="alert alert-danger">
    Username is required.
</div>

请试试这个演示:

https://stackblitz.com/edit/angular-5xtbxm?file=app/app.component.html

答案 1 :(得分:0)

在您的视图中使用subscriptionForm.controls.UserName代替UserName

答案 2 :(得分:0)

问题是您缺少文档中的getter方法,例如:

get name() { return this.heroForm.get('name'); }

get power() { return this.heroForm.get('power'); }

现在,当他们在模板中访问name时,他们实际访问了this.heroForm.get('name')

所以您需要在*ngIf中检查:

subscriptionForm.get('UserName').errors.required

答案 3 :(得分:0)

要访问表单的模型,您需要使用CMD ["python", "manage.py", "runserver", "0.0.0.0:80"] 。为了使其正常工作,我会将模型中的初始值设置为空字符串而不是subscriptionForm.get('UserName')

null