2022

12

1

Vue3でループ中にコンポーネント出力してやんよ!!!

タグ: | | |

Pocket
LINEで送る
Facebook にシェア
reddit にシェア
LinkedIn にシェア

Nuxt3が正式リリースされたのでVue3の記述にも慣れるために遅ればせながら触り始めてます。

VuetifyのタブコンポーネントUIを実装する際に、各タブ情報をループしながらコンテンツとなるコンポーネントファイルも一緒に出力するメモ

環境

  • Docker Desktop for Mac
  • Nuxt.js 3.0.0
  • vuetify 3.0.6
  • pug 3.0.2

コード

まずはタブ切り替え時に出力するコンポーネントファイルを準備。

# 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サイド側の記述がかなりすっきりしました






Pocket
LINEで送る
Facebook にシェア
reddit にシェア
LinkedIn にシェア

トップへ