Angular

Angular Reactive Forms(リアクティブフォーム)の使い方

2019年2月23日

Angular で提供されている Reactive Forms(リアクティブフォーム)の使い方を見てみましょう。

AppModule.ts

Reactive Forms を利用するため、@angular/forms から ReactiveFormsModule をインポートします。

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { ReactiveFormsModule } from '@angular/forms';
import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    ReactiveFormsModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

AppComponent.ts

コンポーネント上では、@angular/forms から FormBuilder をインポートします。
各入力フォームコントロールは FormControl で生成します。そして、これら入力フォームコントロールをまとめ上げるのが、group メソッドの役割です。

import { Component } from '@angular/core';
import { FormBuilder, FormControl } from '@angular/forms';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'build-test';

  id = new FormControl('');
  password = new FormControl('');

  loginForm = this.fb.group({
    id: this.id,
    password: this.password
  });

  constructor(private fb: FormBuilder) {

  }

  login() {
    console.log('id: ', this.loginForm.get('id').value);
    console.log('password: ', this.loginForm.get('password').value);
  }
}

AppComponent (HTML テンプレート)

HTML テンプレート上では、form タグの formGroup 属性に、コンポーネントで生成した FormGroup(loginForm) を指定します。form タグ配下の入力コントロールには、formControl 属性から FormControl を紐づけます。

<form [formGroup]="loginForm" (ngSubmit)="login()">
  <input type="text" [formControl]="id">
  <input type="password" [formControl]="password">
  <input type="submit" value="ログイン">
</form>

ngSubmit に登録されている login() メソッドでは、FormGroup から FormControl を取り出して値を出力しています。

-Angular