Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
Angular TIPS

Angular TIPS

フォームにラジオボタンのリストを設置するには?

2018年1月23日

選択肢の中から1つを選択する「ラジオボタンのリスト」を設置するための基本的な方法を解説する。

  • このエントリーをはてなブックマークに追加

【対応バージョン】 Angular 5以降。v5時点で執筆しました。

 本稿では、Angularアプリでラジオボタンのリスト(単一選択リスト)を設置するためのポイントを解説します。以下は、あらかじめ用意されたオブジェクト配列booksを基に、ラジオボタンを生成する例です。また、ラジオボタンの選択を変更した場合、ログにも選択値を出力するものとします。

TypeScript
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  template: `
  <form #myForm="ngForm">
    <!-- 1リストを生成 -->
    <ng-container *ngFor="let b of books; index as i">
      <label>
        <!-- 2ラジオボタンを生成 -->
        <input type="radio" name="book"
          id="book{{i}}"
          [(ngModel)]="sbook"
          [value]="b.isbn" [checked]="sbook == b.isbn"
          (change)="show(i)">{{b.title}}
      </label><br />
    </ng-container>
  </form>
`
})
export class AppComponent {
  sbook = '978-4-7741-9130-0';
  books = [
    { isbn: '978-4-8222-9894-4', title: '基礎からしっかり学ぶC#の教科書' },
    { isbn: '978-4-8222-5355-4', title: 'アプリを作ろう! Visual C#入門' },
    { isbn: '978-4-7741-9130-0', title: 'Angularアプリケーションプログラミング' },
    { isbn: '978-4-7741-9030-3', title: 'C#ポケットリファレンス' },
    { isbn: '978-4-7741-8994-9', title: 'HTML&CSS 超入門' }
  ];

  show(i : number) {
    console.log('ISBN:' + this.sbook);
    console.log('書名:' + this.books[i].title);
  }
}
配列を基にラジオボタンのリストを生成するコード(app.component.ts)

 以下に、ラジオボタンリスト生成のポイントをまとめていきます。

1リストを生成するのはngForディレクティブ

 配列booksを基に、ラジオボタンを生成するには、ngForディレクティブを利用します。<label><br>のように複数の要素を繰り返し出力するには、ダミーのコンテナー要素として<ng-container>要素を設置し、これにngForディレクティブを適用します。

2ラジオボタンで指定する属性

 ラジオボタンで指定すべき属性は以下の通りです。

 まず、ラジオボタンが1つの固まりであることを表すために、name属性には同じ名前(ここではbook)を指定します。要素個々を識別するためのid属性とは別なので注意してください(こちらは「book」+インデックス番号とします*1)。

  • *1 インデックス番号はngForの予約変数index経由で取得できます。

 ラジオボタンリスト全体として受け取るのは1つの値なので、ngModelディレクティブにも共通のプロパティ(ここではsbook)をひもづけておきます。

 どのラジオボタンが選択されているかを表すのが、checked属性(正しくはプロパティ)です。ここでは、選択オプションの値(b.isbn)と現在値(sbook)とを比較した結果を渡します。等しい場合にはchecked属性を付与する、というわけです。

3ラジオボタンの値の変更を検知する

 あとは、changeイベントハンドラーを設置し、ラジオボタンの選択が変更されたときに何らかの処理を行います。この際、イベントハンドラーにデータを識別するためのキーを渡している点に注目です(ここでは配列のインデックス番号)。

 現在の選択値はsbookプロパティから取得できますが、このようにキー情報を渡しておくことで、オブジェクトの任意の情報にもアクセスできるので便利です。

処理対象:ディレクティブ(Directive) カテゴリ:基本
API:NgForOf(*ngFor) カテゴリ:@angular > common > DIRECTIVE(ディレクティブ)

※以下では、本稿の前後を合わせて5回分(第36回~第40回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

Angular TIPS
36. 入力フォームに検証機能を実装するには?(form/input)

Angularにより拡張されている標準的な<form>/<input>要素を使って、検証機能付きの入力フォームを実装する方法を説明する。

Angular TIPS
37. フォームの状態を監視するには?(ngForm/ngModel)

Angularにより拡張されている標準的な<form>/<input>要素を使って、入力の有無を判定したり、サブミット済みかを判定したりと、その状態を監視する方法を説明する。

Angular TIPS
38. 【現在、表示中】≫ フォームにラジオボタンのリストを設置するには?

選択肢の中から1つを選択する「ラジオボタンのリスト」を設置するための基本的な方法を解説する。

Angular TIPS
39. フォームにチェックボックスのリストを設置するには?

選択肢の中から複数を選択する「チェックボックスのリスト」を設置するための基本的な方法を解説する。

Angular TIPS
40. コンポーネントからページのタイトルを操作するには?(Title)

Titleサービスを使って、コンポーネントからページタイトルを設定する方法を説明する。

サイトからのお知らせ

Twitterでつぶやこう!