如何在模式验证上显示消息?

时间:2017-04-07 10:04:21

标签: html5 angular angular2-template angular2-forms

我将模式属性添加到模板

<input class="form-control" type="text" id="elementName"
                                   [(ngModel)]="elementName" name="elementName"
                                   (input)="onElementNameChanged()" #name="ngModel" required pattern="[A-Za-z0-9_)*\S]*" >

如果输入不正确,如何在显示时添加消息?

像工作一样:

<div [hidden]="!name.errors.pattern"
     class="alert alert-danger">
     Name must match pattern
</div>

1 个答案:

答案 0 :(得分:1)

我强烈建议您使用ReactiveForms代替TemplateDrivenForms,因为它们非常适合管理验证模式和消息。

HTML摘录示例:

<form novalidate [formGroup]="user" (ngSubmit)="onSubmit()">

    <div formGroupName="account">

      <md-input-container>
        <input md-input type="text" placeholder="{{'USER.EMAIL' | translate}} *" formControlName="email" autocomplete="off">
        <md-hint class="error" *ngIf="user.get('account.email').hasError('required') && user.get('account.email').touched">
          {{'VALIDATOR.EMAIL_RQ' | translate}}
        </md-hint>
        <md-hint class="error" *ngIf="user.get('account.email').hasError('pattern') && user.get('account.email').touched">
          {{'VALIDATOR.WRONG_EMAIL' | translate}}
        </md-hint>
      </md-input-container>

      <md-input-container>
        <input md-input type="password" placeholder="{{'USER.PASSWORD' | translate}} *" minlength="6" formControlName="password" autocomplete="off">
        <md-hint class="error" *ngIf="user.get('account.password').hasError('required') && user.get('account.password').touched">
          {{'VALIDATOR.PWD_RQ' | translate}}
        </md-hint>
      </md-input-container>

    </div>

    <button md-raised-button [disabled]="!user.valid || submitted" color="accent" type="submit" class="submit-button">
      {{'LOGIN.BUTTON' | translate}}
    </button>

  </form>

此HTML示例显示了带验证的登录表单。请注意md-hint元素仅在表单在特定字段中具有验证错误时才会显示。

您实际上可以设置一个与ReactiveForm匹配的界面。 以下是链接到示例的界面:

export interface Account {
  account: {
    email: string;
    password: string;
  }
}

TypeScript示例代码段

  import { FormGroup, FormBuilder, Validators } from '@angular/forms';
  import { EmailRegex } from 'app/shared/shared.interface'; // Imported regex for validator


  ...

  user: FormGroup;

  ngOnInit() {
    ...

    // Init your reactive form
    this.user = this.formBuilder.group({
      account: this.formBuilder.group({
        email: ['', [Validators.required, Validators.pattern(EmailRegex)]],
        password: ['', Validators.required]
      })
    });
  }

请注意表单组如何与界面匹配。此外,您可以根据需要设置表单值,但正如您所看到的,我的字段emailpassword设置为空字符串值。 请注意,您还可以在链接到该字段的数组中添加任意数量的验证器。

然后,您可以直接从主submit() FormGroup访问您的表单值:

this.user.value.account.email

如果这个例子不够好,我强烈建议你阅读Todd Motto关于ReactiveForms的指南,这是非常好的解释:

https://toddmotto.com/angular-2-forms-reactive