angular html

Angular HTML テンプレート構文ガイド

概要

このガイドでは、AngularのHTMLテンプレート構文を使用して、動的なユーザーインターフェースを作成する方法について説明します。データバインディング、構造ディレクティブ、属性ディレクティブなど、Angularテンプレートの主要な機能を理解することができます。

データバインディングの概要

データバインディングの概要

データバインディングはAngularの中心的な機能であり、コンポーネントのクラスとテンプレート間でデータをやり取りする方法を提供します。一方向データバインディングと双方向データバインディングの違いについて詳しく解説します。

データバインディングのタイプ 説明
一方向データバインディング データがコンポーネントからテンプレートに流れる.
双方向データバインディング データがコンポーネントとテンプレートの間で双方向に流れる.

データバインディングは、コンポーネントのデータをHTMLテンプレートに表示するための仕組みです。Angularでは、二重中括弧{{ }}を使用して、コンポーネントの変数をテンプレートに埋め込むことができます。

例:データバインディング

app.component.ts

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  importData = 'importMessage';
}

app.component.html

<p>{{ importData }}</p>

実行結果

app.component.tsでは、importDataという変数を定義し、importMessageという文字列を代入しています。app.component.htmlでは、{{ importData }}と記述することで、importData変数の値をテンプレートに埋め込んでいます。このように、二重中括弧を使用することで、コンポーネントのデータをHTMLテンプレートに表示することができます。

双方向データバインディング

双方向データバインディングは、ビューとコンポーネントのデータの両方を同期させるための仕組みです。Angularでは、[(ngModel)]ディレクティブを使用して、双方向データバインディングを実現することができます。[(ngModel)]ディレクティブは、フォーム要素の値をコンポーネントの変数にバインドし、変数の値が変更されるとフォーム要素の値も更新されます。

双方向データバインディングを使用するには、FormsModuleモジュールをインポートする必要があります。

例:双方向データバインディング

app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms'; // インポート

import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule // 追加
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

app.component.ts

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  name = 'masao';
}

app.component.html

<input type="text" [(ngModel)]="name">
<p>{{ name }}</p>

実行結果

この例では、入力フィールドに入力された値が、name変数にバインドされ、pタグに表示されます。name変数の値を変更すると、入力フィールドの値も更新されます。このように、[(ngModel)]ディレクティブを使用することで、ビューとコンポーネントのデータを双方向に同期させることができます。

条件分岐 if

条件分岐は、特定の条件に基づいてHTML要素を表示または非表示にするための仕組みです。Angularでは、*ngIfディレクティブを使用して、条件分岐を実現することができます。*ngIfディレクティブは、条件式が真の場合にのみHTML要素を表示します。

*ngIfディレクティブを使用するには、FormsModuleモジュールをインポートする必要があります。

例:条件分岐 if

app.component.ts

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  flg = false;
}

app.component.html

<p *ngIf="flg">flgはtrueです。</p>
<p *ngIf="!flg">flgはfalseです。</p>

実行結果

この例では、flg変数がfalseなので、*ngIf="!flg"の条件式が真となり、「flgはfalseです。」というテキストが表示されます。flg変数をtrueに変更すると、「flgはtrueです。」というテキストが表示されるようになります。

条件分岐 switch

switch文は、複数の条件に基づいて異なるHTML要素を表示するための仕組みです。Angularでは、ngSwitchディレクティブを使用して、switch文を実現することができます。ngSwitchディレクティブは、式と一致するngSwitchCaseディレクティブを持つHTML要素を表示します。一致するngSwitchCaseディレクティブがない場合は、ngSwitchDefaultディレクティブを持つHTML要素が表示されます。

ngSwitchディレクティブを使用するには、FormsModuleモジュールをインポートする必要があります。

例:条件分岐 switch

app.component.ts

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  sex = 'men';
}

app.component.html

<select [(ngModel)]="sex">
  <option value="men">男性</option>
  <option value="women">女性</option>
</select>

<div [ngSwitch]="sex">
  <p *ngSwitchCase="'men'">男性料金:1000円</p>
  <p *ngSwitchCase="'women'">女性料金:800円</p>
  <p *ngSwitchDefault>料金:1200円</p>
</div>

実行結果

この例では、セレクトボックスで選択された値がsex変数にバインドされます。ngSwitchディレクティブは、sex変数の値に基づいて、対応するngSwitchCaseディレクティブを持つpタグを表示します。例えば、sex変数がmenの場合、「男性料金:1000円」というテキストが表示されます。

ループ処理

ループ処理は、配列などのデータ構造を繰り返し処理するための仕組みです。Angularでは、*ngForディレクティブを使用して、ループ処理を実現することができます。*ngForディレクティブは、配列の各要素に対してHTML要素を繰り返し表示します。

*ngForディレクティブを使用するには、FormsModuleモジュールをインポートする必要があります。

例:ループ処理

app.component.ts

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  names = ['田中', '佐藤', '鈴木'];
}

app.component.html

<ul>
  <li *ngFor="let name of names">{{ name }}</li>
</ul>

実行結果

この例では、names配列の各要素に対して、liタグが繰り返し表示されます。let name of namesという構文は、配列の各要素をname変数に代入することを意味します。このように、*ngForディレクティブを使用することで、配列の要素を簡単に表示することができます。

要素追加

変数の値をHTML要素の属性に追加するには、角括弧[]を使用します。

例:要素追加

app.component.ts

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  url = 'https://www.google.com/';
}

app.component.html

<a [href]="url">Google</a>

実行結果

この例では、url変数の値がaタグのhref属性に追加されます。このように、角括弧を使用することで、変数の値をHTML要素の属性に追加することができます。

 CSSを追加

ngClassディレクティブは、条件に基づいてHTML要素にCSSクラスを追加または削除するための仕組みです。ngClassディレクティブは、オブジェクトまたは配列を受け取ります。オブジェクトの場合、キーはCSSクラス名、値は条件式になります。条件式が真の場合、キーに対応するCSSクラスが要素に追加されます。

例:CSSを追加

app.component.css

.colorstyle {
  color: red;
}

app.component.html

<p [ngClass]="{colorstyle: true}">赤色のテキスト</p>
<p [ngClass]="{colorstyle: false}">黒色のテキスト</p>

実行結果

この例では、colorstyleクラスが定義されたCSSファイルapp.component.cssを読み込んでいます。最初のpタグでは、ngClassディレクティブの条件式がtrueなので、colorstyleクラスが追加され、テキストが赤色で表示されます。2番目のpタグでは、条件式がfalseなので、colorstyleクラスは追加されず、テキストはデフォルトの黒色で表示されます。

イベント追加

イベントリスナーは、HTML要素で発生したイベントを処理するための仕組みです。Angularでは、丸括弧()を使用して、イベントリスナーを追加することができます。丸括弧内には、イベント名と、イベントが発生したときに実行するコンポーネントのメソッドを指定します。

例:イベント追加

app.component.html

<button (click)="masao()">クリック</button>

app.component.ts

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  masao() {
    alert('クリックされました!');
  }
}

実行結果

この例では、ボタンをクリックすると、masao()メソッドが実行され、アラートダイアログが表示されます。このように、丸括弧を使用することで、HTML要素にイベントリスナーを追加することができます。

パイプ

パイプは、データをフォーマットするための仕組みです。Angularでは、パイプを使用して、日付のフォーマット、通貨のフォーマット、文字列の大文字化などを行うことができます。パイプは、テンプレート内でパイプ記号|を使用して適用します。

例:パイプ

app.component.ts

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  text = 'masao';
}

app.component.html

<p>{{ text | uppercase }}</p>

実行結果

この例では、uppercaseパイプを使用して、text変数の値を大文字に変換しています。このように、パイプを使用することで、データを簡単にフォーマットすることができます。

自作タグ

自作タグは、独自のHTMLタグを作成するための仕組みです。Angularでは、コンポーネントを使用して、自作タグを作成することができます。コンポーネントは、HTMLテンプレート、CSSスタイル、およびTypeScriptコードを含む再利用可能なUI要素です。

例:自作タグ

まず、Angular CLIを使用して、origintagという名前の新しいコンポーネントを作成します。

ng generate component origintag

origintag.component.html

<p>これは自作タグです。</p>

app.component.html

<app-origintag></app-origintag>

実行結果

この例では、origintagコンポーネントを作成し、app.component.html<app-origintag>タグを使用して表示しています。このように、コンポーネントを使用することで、独自のHTMLタグを作成することができます。

参考文献

QA

Q1: Angularでデータバインディングとは何ですか?

A1: データバインディングは、コンポーネントのクラスとテンプレート間でのデータのやり取りを可能にする機能です。

Q2: ngIfとngForは何に使用しますか?

A2: ngIfは条件によってDOM要素を表示・非表示にするために使用し、ngForは配列の各要素をループして表示するために使用します。

Q3: 属性ディレクティブはどのように機能しますか?

A3: 属性ディレクティブは、DOM要素のプロパティや外観を変更するために使用され、カスタムディレクティブの作成も可能です。