Dev Study
← Angular コース

39. テンプレート参照変数 — # で要素に名前を付ける

テンプレート内の要素に #inputEl のようにシャープ付きの名前を書くと、その要素を同じテンプレート内の別の場所から参照できます。これをテンプレート参照変数と呼び、input要素なら inputEl.value で現在の入力値を、inputEl.focus() でフォーカス操作を直接呼び出せます。

実務では「ボタンを押した瞬間の入力値をメソッドに渡す」「別の要素へフォーカスを移す」といった、ちょっとした値の受け渡しや操作に便利です。値を常に追跡する必要がなければ、ngModel でプロパティを用意するよりも手軽に書けます。

参照できるのは同じテンプレートの中だけで、クラスのTypeScriptコードからは直接触れない点に注意してください(クラス側から扱う方法は後のviewChildのレッスンで学びます)。また、コンポーネントのタグに付けた場合は、DOM要素ではなくそのコンポーネントのインスタンスが手に入ります。

サンプルコード(フレームワーク環境が必要なため表示のみ)

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

@Component({
  selector: 'app-search-box',
  // #keywordEl で input 要素に名前を付け、同じテンプレート内から参照する
  template:
    '<input #keywordEl placeholder="キーワード">' +
    '<button (click)="search(keywordEl.value)">検索</button>',
})
export class SearchBoxComponent {
  search(keyword: string) {
    console.log('検索:', keyword); // ボタンを押した瞬間の入力値が届く
  }
}
サンプルコードで身につける(5本) →

学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。

公式ドキュメントで詳しく ↗