見出し画像

angular#3

リアクティブフォームとテンプレート駆動フォーム

・リアクティブフォーム

 コンポーネントにあらかじめFormGroup、FormControlを作成する。
 テンプレート側はそれらのオブジェクトを参照して利用する。
 テンプレートは↓のイメージ 

<form [formGroup]="calcForm">
  <mat-form-field class="example-full-width" appearance="fill">
    <mat-label>数値</mat-label>
    <input matInput placeholder="100" formControlName="num1">
  </mat-form-field>
  +
  <mat-form-field class="example-full-width" appearance="fill">
    <mat-label>数値</mat-label>
    <input matInput placeholder="200" formControlName="num2">
  </mat-form-field>
  <button mat-raised-button color="primary" (click)="Calc()">計算</button>
  <div>
    <mat-label>計算結果={{ret}}</mat-label>
  </div>
</form>

 コンポーネントは↓のイメージ

export class BetterFromComponent implements OnInit {

  // Form関連
  calcForm:FormGroup = new FormGroup(
  {
    "num1": new FormControl(0),
    "num2": new FormControl(0),
  });
  ret:string = "";

  constructor() { }

  ngOnInit(): void {
  }

・テンプレート駆動フォーム

 テンプレートのHTML側テキストボックスや入力エリアに属性を付与してそれに対するFormGroupやFormControlがオブジェクトとして設定される。
 テンプレートは↓のイメージ

<form class="example-form">
  <mat-form-field class="example-full-width" appearance="fill">
    <mat-label>数値</mat-label>
    <input matInput placeholder="100" name="num1" [(ngModel)]="num1">
  </mat-form-field>
  +
  <mat-form-field class="example-full-width" appearance="fill">
    <mat-label>数値</mat-label>
    <input matInput placeholder="200" name="num2" [(ngModel)]="num2">
  </mat-form-field>
  <button mat-raised-button color="primary" (click)="Calc()">計算</button>
  <div>
    <mat-label>計算結果={{ret}}</mat-label>
  </div>
</form>

コンポーネント側は↓のイメージ

export class TemplateFromComponent implements OnInit {
  ret:string;
  num1:string;
  num2:string;
  num:string;
  name:string = "koga";

  constructor() { 
    this.ret = "0";
    this.num1 = "";
    this.num2 = "";
    this.num = "111111";
  }

上記についてまだメリットデメリットはしっくり来ていないが、リアクティブフォームのほうが、入力データの複雑な処理、制御ができるとのこと。

angularの技術力が上がれば利点にも気づくということにしておこう。
や実践してみれば技術力は付く!精神。

この記事が気に入ったらサポートをしてみませんか?