などの疑問や悩みを解決してまいります。
Vue.jsではリアクティブ変数を利用することで動的に属性値を変更することが簡単にできます。
その中で、条件に応じて要素のスタイルを変更したいと思われている方も多いと思います。
今回は、動的にクラスを追加する方法について解説します。
完成例
まずは完成例を紹介します。
以下が実装コードになります。(※Vuetifyを使用しています。)
<template>
<v-container>
<div :class="['border pa-6 mb-2', bgColor(number)]">{{ number }}</div>
<v-btn @click="add">+</v-btn>
<v-btn @click="sub">-</v-btn>
</v-container>
</template>
<script setup land="ts">
import { ref } from "vue";
const number = ref(0);
/**
* 数値を足し算する関数
*/
const add = () => {
number.value++;
};
/**
* 数値を引き算する関数
*/
const sub = () => {
number.value--;
};
/**
* 数値が正の数か負の数で背景色を変更する関数
* @param number
* @return 背景色
*/
const bgColor = (number) => {
if (number > 0) {
return "bg-success";
} else if (number < 0) {
return "bg-error";
} else {
return "bg-white";
}
};
</script>
完成例では+ボタンをクリックでnumber
が+1され、-ボタンをクリックしたらnumber
が-1されます。
number
の数値が正の数であれば背景色が緑色に、負の数であれば背景色が赤色に、0の場合は背景色が白色になります。
このように、条件に応じてクラスを付与して背景色を変更しています。
コード解説
肝心のクラス部分の記述は以下のようになります。
<div :class="['border pa-6 mb-2', bgColor(number)]">{{ number }}</div>
まずクラスをv-bind
で動的に変更できるようにします。
v-bind
については以下の記事を参考にしてください。-
【Vue.js】v-bindディレクティブについて解説します。
続きを見る
そして値を配列にして元々指定しているクラスと、動的に変更する関数を記述しています。
関数の処理内容は以下のようになっています。
/**
* 数値が正の数か負の数で背景色を変更する関数
* @param number
* @return 背景色
*/
const bgColor = (number) => {
if (number > 0) {
return "bg-success";
} else if (number < 0) {
return "bg-error";
} else {
return "bg-white";
}
};
関数の引数にはnumber
をいれて、そのnumber
の数値に応じて条件分岐します。
値はreturn
で返し、配列に返した値を入れます。
これにより背景色を変更するクラス名を入れることで条件に応じて背景色を変更することができています。