タグ:Nuxt.js | pug | Vue3 | Vuetify
Nuxt3が正式リリースされたのでVue3の記述にも慣れるために遅ればせながら触り始めてます。
VuetifyのタブコンポーネントUIを実装する際に、各タブ情報をループしながらコンテンツとなるコンポーネントファイルも一緒に出力するメモ
まずはタブ切り替え時に出力するコンポーネントファイルを準備。
# CompA.vue
<template lang="pug">
h1
Comp A
</template>
# CompB.vue
<template lang="pug">
h1
Comp B
</template>
呼び出し元のAppファイル
# App.vue
<script setup lang="ts">
import CompA from './CompA.vue'
import CompB from './CompB.vue'
import { ref } from 'vue'
const infoTabs = ref(null)
// 出力コンポーネント
const lookup:object = {
CompA,
CompB
}
// タブ出力情報(タブキー, アイコン, タイトル, コンポーネントタグ)
const tab_menu:object =
[
{name: 'a', icon: 'fa-solid fa-user', title: 'タブA', lookup : CompA },
{name: 'b', icon: 'fa-solid fa-location-pin', title: 'タブB', lookup : CompB },
];
</script>
<template lang="pug">
div
v-tabs(v-model="infoTabs" bg-color="indigo" show-arrows)
v-tab(v-for="list in tab_menu" :value="list.name" :key="list")
font-awesome-icon(:icon="list.icon" :title="list.title")
v-card-text
v-window(v-model="infoTabs" v-for="tab in tab_menu" :key="tab")
v-window-item( :value="tab.name")
component(:is="tab.lookup")
</template>
アイコンにfontawesomeを使ってますが、使わない場合はそのままテキストを。
tab_menu
に出力したいコンポーネントを追記すればループ処理で出力が可能です
今回Vueのis属性の存在を初めて知ることができたので、templateサイド側の記述がかなりすっきりしました