みなさんこんにちは、現役エンジニアのサメハックです
アパレル企業でトップ販売員を経て
未経験からWebエンジニアに転職し、
現在正社員として5年働いています!
Angularの解説シリーズです。
今回はプロパティバインディングについて学んでいきましょう!
駆け出しエンジニアや未経験の方、
また新入社員を指導する先輩社員にとっても
わかりやすいように解説していきます!
- プロパティバインディングが理解できる
※PCにnpm、nodeがインストールされている前提で記述します。
yarn等をお使いの方は読み替えてください。
作りたいもの
このように、HTMLの属性をTypeScriptで操作する
データバインディングが実装されたアプリケーションを作りましょう。
他のファイルは左上のハンバーガーメニューをクリックして確認してね!
プロパティバインディングとは
そもそもプロパティバインディングとは、何かというと
HTMLの属性(プロパティ)の値をTypeScriptと紐付けることです。
■構文
<div [バインドする属性名]="TypeScriptの変数名"></div>
このように、カギ括弧(ブラケットといいます)でバインドする属性を囲うことで、
属性値にTypeScriptの値を設定することができます。
単方向データバインディングと言うよ!
データバインディングの種類
単方向データバインディング:画面 → データ
画面操作をデータに反映させる
<タグ名 (イベント名)="処理"></タグ名>
一般的にイベントリスナーで使用されるよ!
単方向データバインディング:データ → 画面
データを画面に反映させる
<タグ名 [属性名]="変数名"></タグ名>
双方向データバインディング
データと画面上の値が紐付いている状態。
主にinputで使用されます。
■構文
<input [(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';
}
画面
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フォローしてもらえると嬉しいです🦈