• 验证响应式表单

    验证响应式表单

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

    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时,才会显示错误消息。