【Angular】プロパティバインディングを設定しよう!【HTML属性の操作】

ANGULAR

みなさんこんにちは、現役エンジニアのサメハックです

アパレル企業でトップ販売員を経て
未経験からWebエンジニアに転職し、
現在正社員として5年働いています!

Angularの解説シリーズです。

今回はプロパティバインディングについて学んでいきましょう!

駆け出しエンジニアや未経験の方、
また新入社員を指導する先輩社員にとっても
わかりやすいように解説していきます!

この記事を読むと・・・
  • プロパティバインディングが理解できる

※PCにnpm、nodeがインストールされている前提で記述します。
 yarn等をお使いの方は読み替えてください。

環境がない人はcodesansboxを使ってね!

作りたいもの

このように、HTMLの属性をTypeScriptで操作する
データバインディングが実装されたアプリケーションを作りましょう。

これが今回の完成形だよ!
他のファイルは左上のハンバーガーメニューをクリックして確認してね!

プロパティバインディングとは

そもそもプロパティバインディングとは、何かというと
HTMLの属性(プロパティ)の値をTypeScriptと紐付けることです。

■構文

  <div [バインドする属性名]="TypeScriptの変数名"></div>

このように、カギ括弧(ブラケットといいます)でバインドする属性を囲うことで、
属性値にTypeScriptの値を設定することができます。

このように、データと画面(DOM)を一方的に操作することを
単方向データバインディングと言うよ!

データバインディングの種類

単方向データバインディング:画面 → データ

画面操作をデータに反映させる

<タグ名 (イベント名)="処理"></タグ名>
【Angular】イベントリスナーを作ろう!【サンプルあり】
画面→データのバインドはカッコ()で表現するよ!

一般的にイベントリスナーで使用されるよ!

単方向データバインディング:データ → 画面

データを画面に反映させる

<タグ名 [属性名]="変数名"></タグ名>
データ→画面のバインドはブラケット[]で表現するよ!

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

データと画面上の値が紐付いている状態。
主にinputで使用されます。

■構文

<input [(ngModel)]="変数名" />
【Angular】ngModelを使おう!【双方向データバインディング】
データ → 画面
画面  → データ
どちらもバインドされるのでブラケット[]とカッコ()の両方を使うよ!

プロパティバインディングを実装しよう!

属性をバインドする

これが基本的な記述です。
ブラケット内に任意の属性名を記述することで、
属性値をバインドすることができます。

■構文

<タグ名 [属性名]="変数名"></タグ名>

app.component.html

<div>
  <!-- style属性にmyStyleの文字列を渡す -->
  <p [style]="myStyle">はじめまして、こんにちは</p>
</div>

app.component.ts

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
})
export class AppComponent {
  // 属性値
  myStyle: string = 'color:red';
}

画面

これでstyle属性をバインドすることができたね!

inputタグのvalue属性をバインドする

ここでは、プロパティバインディングが
単方向バインディングであることを
inputの入力値と実データを比較して確認します。

app.component.html

<div>
  <!-- 単方向バインディングのため、文字入力しても
       実データは変更されない   -->
  <input [value]="myText" />
  {{ myText }}
</div>

app.component.ts

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
})
export class AppComponent {
  // 属性値
  myText: string = 'テキスト';
}

画面

↓ インプット内のテキスト変更

インプットの値を操作しても実データには反映されないことから
データ→画面 の単方向バインディングであることがわかったね!

クラス名をバインドする

クラス名のバインドは少し特殊です。
ここでは、isCheckedがtrueの場合、クラス名が付与され
falseの場合、クラス名が付与されないことを確認します

■構文

<タグ名 [class.付与したいクラス名]="boolean値"></タグ名>

app.component.html

<div>
  <!-- チェックすると、isCheckedがtrueになり、
       black-colorというクラス名が付与される -->
  <span [class.black-color]="isChecked">チェックされると色が反転するよ!</span>
  <input type="checkbox" [(ngModel)]="isChecked" />
</div>

app.component.ts

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

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

app.component.css

.black-color {
  background-color: black;
  color: white;
}

画面

↓ チェックボックス操作

チェックボックス操作でクラス名を付与するか否かの判定がされたよ!

まとめ

  • プロパティバインディング・・・HTMLの属性をTypeScriptから操作すること
  • <タグ名 [属性名]=”変数名”>
  • 単方向バインディング・・・データ→画面 という単方向でのバインディング

満足いただけたら、1クリックなのでSNSフォローしてもらえると嬉しいです🦈

タイトルとURLをコピーしました