この記事は Vue 2.x 系、 Vuetify 2.x 系 を対象とした記事になります。
2022年3月、Vue 3.x 系統に対応した Vuetify 3 Beta がリリースされました。
Vuetify 3 Beta のインストールを試してみた記事もありますので、ぜひそちらもご覧ください。
対象の記事:Vuetify3 Betaをインストールしてみた件
この記事は、昨日の記事の続編です。
前回の記事では、v-tabs に @change を加えて、
子要素のタブが切り替わった際に、情報を取得する方法について書きました。
今回は、v-tabsの子要素として使う、
v-tab から取得できるイベントについて見ていきたいと思います。
(ややこしいですが、v-tabs は v-tab の親要素。
v-tab は個々のタブのラベル ≒ それを押して表示切り替えができる部分、になります)
v-tab がアクティブになった時に実行される、各種イベント
Vuetify の v-tab(個々のタブのラベル ≒ それを押して表示切り替えができる部分)は、
次の3つのイベントが取得できると 公式に記載 があります。
(1). change
タブがアクティブになったときに発生する。
(2). click
そのタブがクリックされた時に発生する。
(3). keydown
そのタブにキーボード経由で(Tabキーなどを使って)フォーカスを当てた後、
Enterキーを押すことで発生する。
(1). のchangeは単純に、
そのタブがアクティブになった時に発生します。値は void となっていて、$event を使っても返ってくる情報は特にありません。
(2). のclickは、このコンポーネント固有のイベントというよりは、
Vue.js の基本的な @click(v-on:click) で取得できるイベントと同じ挙動のようです。
クリックされた箇所の ClickEvent( PointerEvent ) が返ってくるので、
任意のclassを付与できたり、何らかの要素を足してあげたり、
いろいろ用途がありそうです。
(3). のkeydownは、公式には「Enterキーを押した時に発生」するとあります。
あまり効果的な使い道がすぐには浮かばなかったですが、
前後のUIでキーボード操作を多用している画面などでは、シームレスに操作できる点では
もしかしたら扱いやすいイベントなのかもしれません。
私の手元の環境では、一度キーボードのTabキー等で任意のv-tabをアクティブにした上でなければ発生しないイベントでした。
なお、公式ページにはENTERキーを押した時に発生とありますが、
私の手元の環境では、ENTERキー以外も検出される模様でした。
changeイベントの例
v-tab の change イベントの例です。
<v-tabs> <v-tab @change="changeTab()">Item One</v-tab> <v-tab @change="changeTab()">Item Two</v-tab> <v-tab @change="changeTab()">Item Three</v-tab> </v-tabs>
↑各 v-tab に @change(v-on:change)を指定。
JavaScript側は次のように書くことで、発生を知ることが可能です。
ただし上で書いた通り戻り値が void となっているので、
単純にアクティブになったことを検知する以外では、あまり有効な使い方が思いつきません
changeTab() { console.log('is active'); }
clickイベントの例
v-tab に @click を設定して、発生したイベントの値を受け取る例です。
<v-tabs> <v-tab @click="clickTab($event)">Item One</v-tab> <v-tab @click="clickTab($event)">Item Two</v-tab> <v-tab @click="clickTab($event)">Item Three</v-tab> </v-tabs>
↑各 v-tab に @click(v-on:click)を指定。
JavaScript側は次のように書くことで、発生を知ることが可能です。
4行目にあるように、targetの下に格納されている
outerTextあたりを見てみると、ちゃんとクリックされた対象の
要素がもつ値が返ってきていることがわかるかと思います。
clickTab(event) { console.log(event); // ↑クリックされた要素のイベント全体が返ってくる console.log('クリックされたタブ名:'+event.target.outerText); // ↑このように書くことで、クリックされた個々の要素の値を参照できる }
keydownイベントの例
keydownイベントについては、上のセクションでも書いたように
私の手元の環境では、ENTERキー以外でも発生するイベントでした。
挙動も不安定のため、こちらに関しては、発生条件等について調査中です。そのため、サンプルは省略します。
v-tab API の公式解説ページ
やはり公式解説が一番詳しいです。Vuetifyは公式サイトがしっかりしているので、とても感謝しています。
v-tab API — Vuetify
この記事のまとめ
今回は前回の記事に続いて
v-tab の各タブから取得可能なイベントについて、簡単にご紹介してみました。
change, click をきっかけとしたイベント取得に関しては、
活用方法が結構ありそうで、今後 Vuetify を使ってtab型のUIパーツを作ることがあった際には
役立ちそうだなと記事を書きながら感じました。
当サイトでは、今後も Vue.js および Vuetify に関する様々な記事を書いていく予定です。
※この記事は内容の品質向上を目的に、随時更新を行う場合があります。