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で状態のチェックをしてあげれば作成できます。





Visual Studio Codeで簡易的なローカルサーバーを起動して、コード保存時に自動でブラウザをリロードする拡張機能「Live Server」
iCLUSTA+でWordPressのアップロード容量を上げたいときのメモ
WordPressで作成した記事をSlackでシェアしたときに、抜粋文が長く表示される場合の対処法
「EWWW Image Optimizer」を使ってWordPressをWebPに対応する方法
WordPressの常時SSL化で、下層ページのhttpからhttpsへのリダイレクトがうまくいかない場合に確認すること
iTerm2で起動時に左上に表示される「Tip of the Day(今日のTip)」を非表示にする方法
iOS Safariで指定したフォントサイズにならない場合の対処法
コーディング時にちゃんと意識したい複数語の連結方法一覧(キャメルケース・スネークケース・ケバブケース)
WordPressの自動バックグラウンド更新を無効にする方法とその注意点
WordPressのカスタム投稿タイプを追加後、ページは存在しているはずなのに404になる場合の解決方法
AirPodsで片耳を外しても再生が止まらないようにする方法
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
高機能なスクリーンショットアプリ「CleanShot X」
macOSの効率化に関するDiscordコミュニティ「CMD-F」を立ち上げました
1Passwordの開発者向け機能(SSH Agent / Environments / 1Password CLI / Developer Watchtower)
Default Folder Xで保存ダイアログ内のファイルリストにフォーカスする方法
Obsidianで整理した知識をAnkiで定着させる方法
Figma × Keyboard Maestroでどこまで効率化できる?
マウス操作の完成度が高いウインドウリサイズアプリ「Magnet」
Macで複数ディスプレイを使っている場合に便利な設定集
AppCleanerでMacアプリを関連ファイルごと完全に削除する
操作に没頭できる!Firefox版 Arcのようなブラウザ「Zen Browser」