Angularでコンポーネントの値を「ビュー」に反映させるには?({{...}})Angular TIPS

JavaScriptのオブジェクトをHTMLテンプレートに結び付けるためのデータバインドを記述するためのInterpolation記法の基礎を解説する。

» 2017年01月04日 05時00分 公開
[山田祥寛]
「Angular TIPS」のインデックス

連載目次

現在では、Web標準技術を利用したアプリ開発が広く普及し、そのためのフレームワークも多数存在しています。その中でも主流のフレームワークの1つである「Angular」を活用し、そのための知識を備えることには大きな意味があります。本連載は、Angularユーザーに向けて、その使いこなしTIPSを紹介するものです。なお、本連載は「Build Insider」で公開していた連載「Angular Tips」を同サイトおよび筆者の了解を得たうえで、本フォーラムに移行したものです。記事はBuild Insiderで公開した状態のまま移行しているため、用語統一などの基準が@ITの通常の記事とは異なる場合があります。


【対応バージョン】

 Angular 2/4対応。v2時点で執筆し、v4時点で内容を確認・検証しました。


 データバインドとは、JavaScriptのオブジェクト(モデル)をHTMLテンプレート(ビュー)に結び付けるための機能。Angularの(AngularJS 1.x時代からの)特徴的な機能の一つです。

 データバインドにはさまざまな記法がありますが、まずはInterpolationと呼ばれる記法からです。以下は、あらかじめ用意された文字列をテンプレートに埋め込むためのサンプルです。

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

@Component({
  selector: 'app-root',
  // [2]準備されたテンプレート変数
  template: '<p>{{msg}}</p>'
})
export class AppComponent {
  // [1]テンプレート変数を準備
  msg = 'こんにちは、世界!';
}

用意された文字列をビューに反映させるためのコード(app/app.component.ts)

 Angular 2では、テンプレートで利用する値は、コンポーネントのプロパティとして受け渡すのが基本です。この例であれば、AppComponentコンポーネント(クラス)のmsgプロパティを準備しています([1])。

 これを受け取るのが、テンプレートの{{式}}という表現です([2])。ここでは単純にコンポーネントのプロパティを参照しているだけですが、{{1 + 2}}のような式、{{getData()}}のようなメソッド呼び出しなど、任意の式を書くことが可能です。

{{...}}式の注意

 {{...}}ではかなり自由にJavaScriptの式を表すことが可能です。しかし、全てのJavaScript式を許容しているわけではない点に注意してください。

【1】利用できない演算子がある

 主に、副作用を伴うような演算子は、{{...}}式では禁止されています。

  • 代入演算子(=、+=、-=など)
  • new演算子
  • ;,
  • インクリメント/デクリメント演算子
  • ビット演算子(|、&)

【2】グローバル名前空間上のオブジェクトは参照できない

 {{...}}式のコンテキストは、コンポーネントのインスタンスです*1。つまり、{{...}}式からは、グローバル名前空間にあるwindow、documentのようなオブジェクトにアクセスすることはできません。

*1 {{msg}}が、暗黙的にAppComponentコンポーネントのプロパティを参照していた点、{{AppComponent.msg}}のような表現はしない点を、いま一度確認しておきましょう。


【3】{{...}}式のガイドライン

 その他、{{...}}式を記述する際には、以下のようなガイドラインに沿うべきです。

  • 式が副作用を伴わないこと
  • 短時間で実行できること
  • シンプルであること
  • 冪等(べきとう)であること(=同じ操作を何度実行しても同じ結果を返すこと)

 Angular 2では、内部的に{{...}}式を頻繁に評価します。時間のかかる{{...}}式は、アプリそのもののパフォーマンスに直接影響する可能性があるので、注意してください。

処理対象:テンプレート構文(Template Syntax) カテゴリ:基本
処理対象:Interpolation(補間)|{{...}}式 カテゴリ:テンプレート構文(Template Syntax)


「Angular TIPS」のインデックス

Angular TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。