• 响应式表单基础
    • FormControl

    响应式表单基础

    开始使用FormBuilder,我们必须首先确保我们正在使用正确的指令和正确的类,以利用程序式的表单。 为此,我们需要确保在应用程序模块的引导阶段中导入FormsModuleReactiveFormsModule

    这将让我们访问组件,指令和providers,如FormBuilderFormGroupFormControl

    在我们的例子中,将构建一个登录表单,我们看下面的内容:

    app/login-form.component.ts

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

    app/login-form.component.html

    1. <form [formGroup]="loginForm" (ngSubmit)="login()">
    2. <label for="username">username</label>
    3. <input type="text" name="username" id="username" [formControl]="username">
    4. <label for="password">password</label>
    5. <input type="password" name="password" id="password" [formControl]="password">
    6. <button type="submit">log in</button>
    7. </form>

    View Example

    FormControl

    请注意,FormControl类被分配到类似命名的字段,无论是在此还是在FormBuilder#group({ })方法中。 这主要是为了方便访问。 通过保存thisFormControl实例的引用,您可以访问模板中的输入,而无需引用表单本身。 否则,可以通过使用loginForm.controls.usernameloginForm.controls.password在模板中访问表单字段。 同样,此情况下的任何FormControl实例都可以通过使用其.root属性(例如username.root.controls.password)访问其父组。

    确保root和控件在使用之前存在。

    FormControl需要两个属性:初始值和验证器列表。 现在,我们没有验证。 这将在后续步骤中添加。