Vue.jsのv-forで生成した要素をクリックするたびに、classをトグルで付け外しする方法

Vue.jsのv-forで複数の要素を生成した要素に、クリックするたびにclassをトグルで付け外しするためにはどうすればいいのでしょうか?
- classが付くのは常に1つの要素のみ
- すでに要素にclassが付いている状態で、別の要素をクリックした場合は、クリックした要素にclassが付く(それ以外の要素からはclassは外れる)
jQueryの場合はremoveClassですべての要素からclassを外して$(this)にaddClassするだけで済むのですが、Vue.jsの場合は少し工夫が必要です。
考えればすぐに分かりましたが、調べみても出てこなかったので備忘録として残しておきます。
v-forで生成した要素にトグルでclassを付け外しする
実装の考え方は下記の通りです。
v-forでループするときに使ったnを利用して、クリックしたときにactiveItemがnになるようにするactiveItemがnになったときにclass(今回の場合は.is-active)が付くようにする- すでに
activeItemがnになっているときは、nをnullにする(classが外れる)
See the Pen Vue.js toggle item by Masakazu Saito (@31mskz10) on CodePen.
コピー用のコードは下記になります。
<ul>
<li v-on:click="onActive(n)" v-for="n of 6" :key="n" v-bind:class="{ 'is-active': activeItem === n }">Item {{n}}</li>
</ul>(function() {
'use strict';
var vm = new Vue({
el: 'ul',
data() {
return {
activeItem: null
}
},
methods: {
onActive(n) {
if(this.activeItem === n){
this.activeItem = null;
}else{
this.activeItem = n;
}
}
}
});
})();要素が複数なので今回はnを使いましたが、1つの場合はtrue / falseで状態のチェックをしてあげれば作成できます。



Google Maps APIでピンのアクティブ時にピン画像を変える方法
Visual Studio Codeで複数ファイルを編集するときにタブやペインの操作方法
HTTP通信をラクに実装できる「axios」の基本
SourceTreeで環境設定の「カスタムアクション」「アップデート」「高度な設定」が選択できない
常時SSL化の設定をしたのに「保護された通信」が表示されない時はパスにHTTPが残っているのかも?
「EWWW Image Optimizer」を使ってWordPressをWebPに対応する方法
EmmetのWrap with Abbreviationで複数行のマークアップを効率的に行う
Visual Studio Codeで連番を入力する拡張機能「vscode-input-sequence」
「DevTools z-index」でz-indexがかかっている要素をChrome開発者ツールに一覧表示させる
Vue.jsで値段を表示するときに3桁ごとにカンマを入れる方法
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
無料版でも高機能なランチャーアプリ「Raycast」の基本機能と環境設定
OnyXでターミナルを使わずにmacOSの詳細設定を行う
軽量で高速なターミナルエミュレーター「Ghostty」の設定方法
Eagleで実現するクリエイティブ素材の簡単管理
かゆいところに手が届く「Supercharge」でMac環境を便利にカスタマイズする
超軽量なコードエディタ 「Zed」をサブエディタとして活用する
Bartender 6で追加されたWidgets機能で自作メニューバーアイテムを簡単に作成する
Googleカレンダーを便利に活用するための小技集(祝日だけを表示・月末の繰り返しイベントを追加)
Obsidianを使った「自己流PKM」で行う知識トレーニング
テキストエディタ・ノートアプリ関連のショートカットキーをKeyboard Maestroで統一する