Dev Study
← 解説「テンプレート補間 — {{ }} で値を表示する」に戻る

サンプルコードで身につける: テンプレート補間 — {{ }} で値を表示する

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

1プロパティの値をそのまま表示する

補間のいちばん基本の形で、クラスのプロパティ名を {{ }} に書くと値が文字として表示されます。HTMLに直接名前を書くのと違い、データを変えれば表示も変わります。ユーザー名や店舗名など「データ次第で変わる文字」の表示はすべてここから始まります。

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

@Component({
  selector: 'app-welcome',
  // {{ }} の中のプロパティ名が、クラスの値に置き換わる
  template: '<p>ようこそ、{{ userName }}さん</p>',
})
export class WelcomeComponent {
  userName = '佐藤';
}

2式の計算結果を表示する

{{ }} の中にはプロパティ名だけでなく、四則演算などの式も書けます。式が評価されて「結果の値」が表示される、というのが補間の正確な動きです。税込価格や小計のような、その場で計算できる簡単な値の表示によく使われます。

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

@Component({
  selector: 'app-price-view',
  // 中の式が評価され、計算結果が表示される
  template:
    '<p>本体価格: {{ price }} 円</p>' +
    '<p>税込: {{ price * 1.1 }} 円</p>' +
    '<p>{{ quantity }} 個で {{ price * quantity }} 円</p>',
})
export class PriceViewComponent {
  price = 1000;
  quantity = 3;
}

3メソッドの戻り値を表示する

{{ greeting() }} のようにメソッド呼び出しも「値を返す式」なので補間に書けます。条件分岐のような少し複雑なロジックは、テンプレートに詰め込まずクラス側のメソッドに寄せるのがコツです。テンプレートを読みやすく保つ実務の定番テクニックです。

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

@Component({
  selector: 'app-time-greeting',
  // メソッド呼び出しも「値を返す式」なので補間に書ける
  template: '<p>{{ greeting() }}、{{ userName }}さん</p>',
})
export class TimeGreetingComponent {
  userName = '鈴木';
  hour = 9;

  greeting() {
    // 複雑なロジックはテンプレートではなくクラス側に置く
    return this.hour < 12 ? 'おはようございます' : 'こんにちは';
  }
}

4配列の件数を表示する

{{ results.length }} のようにプロパティの先のプロパティへもアクセスできます。「検索結果: ◯件」のような件数表示は、ほぼすべての一覧画面に登場する補間の代表的な使いどころです。配列が増減すれば件数表示も自動で追従します。

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

@Component({
  selector: 'app-result-count',
  // ドットでつないだ式も書ける
  template: '<p>検索結果: {{ results.length }} 件</p>',
})
export class ResultCountComponent {
  results = ['Angular入門', 'Angular実践', 'シグナル徹底解説'];
}

5注文サマリーの表示

ECサイトの注文確認画面のように、複数の補間を組み合わせて1つの画面を作る実務寄りの例です。小計の計算はメソッドにまとめ、テンプレートでは表示したい場所に補間を並べるだけにしています。元の値(単価や個数)を変えれば、すべての表示が一斉に追従します。

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

@Component({
  selector: 'app-order-summary',
  template:
    '<p>小計: {{ subtotal() }} 円</p>' +
    '<p>送料: {{ shippingFee }} 円</p>' +
    '<p>合計: {{ subtotal() + shippingFee }} 円</p>',
})
export class OrderSummaryComponent {
  unitPrice = 1200;
  quantity = 3;
  shippingFee = 500;

  subtotal() {
    return this.unitPrice * this.quantity;
  }
}