【Vue.js】v-forで選択されたアイテムを取得して表示する方法
v-forで選択されたアイテムを取得して表示する方法です。
Vue2のコード例ですが、考え方はVue 3でも同じです。
目次から読む
v-forで選択されたアイテムを取得して表示する方法
ポイント
- liタグなどでv-forを作成する
- data()でtrue/false(選択・非選択)を表す変数を初期設定
- v-forのあるliタグなどにクリックイベントをセットする
- クリックイベントで発火するメソッドを作成する
- メソッドは、クリックされたアイテムを受け取るように引数を設定する
- :classで選択されたことがわかるようにクラスをつけて表示を変える
下の例では、選択・非選択を表す変数selectを作成して、trueにすると選択されたことがわかるようにしています。
選択されたアイテムを取得して条件分岐でクラスを付与するコードの例
クイズアプリなどで選択されたアイテムを取得して正解・不正解を判別できるようにする例です。
template
<ul>
<li
v-for="(item,index) in element.suggestions"
:key="index"
:class="select ? check(item) : ''"
@click="selectResponse(item)"
>
{{item.suggestion}}
</li>
</ul>
status.correctが付いているものをselectしたらcorrectクラス、
ついていないものがselectされたらincorrect、
selectされていない項目はクラスなしという条件にしています。
data()
select: false, //項目の選択/非選択
methods
選択されたアイテムを取得するメソッド
// selectしたものを選択=true
selectResponse(e) {
this.select = true; //選択されたアイテムがtrue(正解でも不正解でも)
},
選択されたものが正解・不正解かによって付与するクラスを変更するメソッド
// classの追加: correctクラス / incorrectクラス
check(status) {
if(status.correct) {
return 'correct'
} else {
return 'incorrect'
}
},
選択されたアイテムについているクラスでチェックマークをつける
また、選択されたアイテムについているクラスでチェックマークをつけたりすることができます。
template
<!-- チェックマーク/バツマーク -->
<div class="fas fa-check" v-if="select ? item.correct: ''"></div>
<div class="fas fa-times" v-if="select ? !item.correct: ''"></div>
条件演算子を使って、選択されたものがある場合で条件を判断します。
もしそれがcorrectのステータスなら、checkを、それ以外ならtimesをつけるというコードです。