验证响应式表单

从上一个登录表单构建,我们可以快速轻松地添加验证。

Angular 2提供了开箱即用的许多验证器。 它们可以与其余的依赖关系一起导入。

app/login-form.component.ts

  1. import { Component } from '@angular/core';
  2. import { Validators, FormBuilder, FormControl } from '@angular/forms';
  3. @Component({
  4. // ...
  5. })
  6. export class AppComponent {
  7. username = new FormControl('', [
  8. Validators.required,
  9. Validators.minLength(5)
  10. ]);
  11. password = new FormControl('', [Validators.required]);
  12. loginForm: FormGroup = this.builder.group({
  13. username: this.username,
  14. password: this.password
  15. });
  16. constructor(private builder: FormBuilder) { }
  17. login () {
  18. console.log(this.loginForm.value);
  19. // Attempt Logging in...
  20. }
  21. }

app/login-form.component.html

  1. <form [formGroup]="loginForm" (ngSubmit)="login()">
  2. <div>
  3. <label for="username">username</label>
  4. <input
  5. type="text"
  6. name="username"
  7. id="username"
  8. [formControl]="username">
  9. <div [hidden]="username.valid || username.untouched">
  10. <div>
  11. The following problems have been found with the username:
  12. </div>
  13. <div [hidden]="!username.hasError('minlength')">
  14. Username can not be shorter than 5 characters.
  15. </div>
  16. <div [hidden]="!username.hasError('required')">
  17. Username is required.
  18. </div>
  19. </div>
  20. </div>
  21. <div >
  22. <label for="password">password</label>
  23. <input
  24. type="password"
  25. name="password"
  26. id="password" [formControl]="password">
  27. <div [hidden]="password.valid || password.untouched">
  28. <div>
  29. The following problems have been found with the password:
  30. </div>
  31. <div [hidden]="!password.hasError('required')">
  32. The password is required.
  33. </div>
  34. </div>
  35. </div>
  36. <button type="submit" [disabled]="!loginForm.valid">Log In</button>
  37. </form>

注意,我们对字段和表单本身添加了相当稳健的验证,只使用内置验证器和一些模板逻辑。

View Example

我们使用.valid.untouched来确定是否需要显示错误,而字段是必需的,没有理由告诉用户如果字段尚未被访问,该值是错误的。

对于内置验证,我们在表单元素上调用.hasError(),我们传递一个字符串,它表示我们包含的验证器函数。 仅当此测试返回true时,才会显示错误消息。