■ はじめに
https://dk521123.hatenablog.com/entry/2020/12/26/000242
の続き。 今回は、Vuetify の コンポーネント について取り上げる
目次
【0】始める前に 1)デザイン例 / テンプレート 2)App.vue の修正 【1】v-app 【2】v-content / v-main 【3】v-container / v-row / v-col / v-layout / v-flex 【4】v-app-bar / v-toolbar / v-system-bar / v-footer 【5】v-navigation-drawer 【6】v-space 【7】v-img 【8】v-btn 【9】v-icon ■ 補足:router-xxxx (router-link / router-view) について なお、ユーザ通知に関わるコンポーネントについては、 以下の関連記事を参照のこと。
Vuetify ~ ユーザへの通知 ~
https://dk521123.hatenablog.com/entry/2021/03/01/225352
【0】始める前に
1)デザイン例 / テンプレート
以下のサイトのデザイン例やテンプレートは勉強になる
Wireframes
* Examples をみて、気になったらGithubアイコンボタン押すと Githubに移動し、ソースを参照できる
https://vuetifyjs.com/en/getting-started/wireframes/
themes
https://vuetifyjs.com/en/resources/themes/
2)App.vue の修正
* App.vue を以下のように修正している
サンプル
<template> <v-app> <router-view/> </v-app> </template> <script lang="ts"> import Vue from 'vue'; export default Vue.extend({ name: 'App', data: () => ({ // }), }); </script>
【1】v-app
* 必須コンポーネント * v-navigation-drawerなどのコンポーネントを使用する場合、 v-app直下に配置する
構造イメージ
<template> <v-app> <!-- ★ここにVuetifyのコンポーネントを入れます★ --> </v-app> </template>
【2】v-content / v-main
* v-content は、Vuetify 2.3.0から非推奨らしいので、 v-main を使うべき。
https://qiita.com/00__/items/bfe971ac0be84b7e184b
構造イメージ
<template> <v-app> <!-- ★ ここに注目 ★ --> <v-content> <router-view /> </v-content> </v-app> </template>
【3】v-container / v-row / v-col / v-layout / v-flex
* Vuetify は、12分割のグリッドシステムを採用している => その際に必要なタグ。
https://vuetifyjs.com/ja/components/grids/#section-4f7f304465b9
v-container
* グリッドシステムを利用するための元になる入れ物を作るタグ
v-row
* 行(row)の定義
v-col
* 列(column)の定義
サンプル
<template> <v-app> <v-content> <v-container> <!-- 1行目 --> <v-row class="grey lighten-3" style="height: 150px;"> <v-col style="background-color: #FFCDD2"> 01-01 </v-col> <v-col style="background-color: #F8BBD0"> 01-02 </v-col> <v-col style="background-color: #E1BEE7"> 01-03 </v-col> <v-col style="background-color: #D1C4E9"> 01-04 </v-col> <v-col style="background-color: #C5CAE9"> 01-05 </v-col> <v-col style="background-color: #BBDEFB"> 01-06 </v-col> <v-col style="background-color: #B3E5FC"> 01-07 </v-col> <v-col style="background-color: #B2EBF2"> 01-08 </v-col> <v-col style="background-color: #B2DFDB"> 01-09 </v-col> <v-col style="background-color: #C8E6C9"> 01-10 </v-col> <v-col style="background-color: #DCEDC8"> 01-11 </v-col> <v-col style="background-color: #F0F4C3"> 01-12 </v-col> </v-row> <!-- 2行目 --> <v-row cols="4" class="grey lighten-3" style="height: 150px;"> <v-col style="background-color: #FFF9C4"> 02-01 </v-col> <v-col cols="8" style="background-color: #FFECB3"> 02-02 </v-col> </v-row> </v-container> </v-content> </v-app> </template>
補足:v-layout / v-flex について
* Vue 1.x では、 v-row / v-col の代わりに v-layout / v-flex を使用する
v-layout
* v-row の Vue 1.x 版
v-flex
* v-col の Vue 1.x 版
【4】v-app-bar / v-toolbar / v-system-bar / v-footer
v-app-bar / v-toolbar / v-system-bar
* ヘッダー部として使える
https://vuetifyjs.com/ja/components/app-bars/
https://vuetifyjs.com/ja/components/toolbars/
https://vuetifyjs.com/ja/components/system-bars/
v-footer
* フッター部を作成する際に使用
https://vuetifyjs.com/ja/components/footer/
サンプル
<template> <v-app> <!-- ヘッダー --> <div> <v-app-bar> Header </v-app-bar> </div> <!-- 本文 --> <v-content> <v-container> Body </v-container> </v-content> <!-- フッター --> <v-footer> Footer </v-footer> </v-app> </template>
【5】v-navigation-drawer
* サイドバーとして使用できる
https://vuetifyjs.com/ja/components/navigation-drawers/
プロパティ
* expand-on-hover : ホバーすると展開する (表示幅が広がる) * permanent : サイドバーが縮小表示しても表示したままになる (デフォルトだと非表示)
https://qiita.com/rubytomato@github/items/1c75c2b98b8bae410ee1
サンプル
<template> <v-app id="inspire"> <v-system-bar app> <v-spacer></v-spacer> <v-icon>mdi-square</v-icon> <v-icon>mdi-circle</v-icon> <v-icon>mdi-triangle</v-icon> </v-system-bar> <!-- 左サイドバー --> <v-navigation-drawer v-model="drawer" app class="pt-4" color="grey lighten-3" mini-variant expand-on-hover > <v-list nav dense > <v-list-item link> <v-list-item-icon> <v-icon>mdi-folder</v-icon> </v-list-item-icon> <v-list-item-title>My Files</v-list-item-title> </v-list-item> <v-list-item link> <v-list-item-icon> <v-icon>mdi-account-multiple</v-icon> </v-list-item-icon> <v-list-item-title>Shared with me</v-list-item-title> </v-list-item> <v-list-item link> <v-list-item-icon> <v-icon>mdi-star</v-icon> </v-list-item-icon> <v-list-item-title>Starred</v-list-item-title> </v-list-item> </v-list> </v-navigation-drawer> <!-- 右サイドバー --> <v-navigation-drawer app clipped right > <v-list> <v-list-item v-for="n in 5" :key="n" link > <v-list-item-content> <v-list-item-title>Item {{ n }}</v-list-item-title> </v-list-item-content> </v-list-item> </v-list> </v-navigation-drawer> <!-- メイン : pl-0 => padding left : 0px --> <v-main class="pl-0"> <v-content> <v-container> <v-row cols="4" class="grey lighten-3" style="height: 150px;"> <v-col style="background-color: #FFF9C4"> 01 </v-col> <v-col cols="8" style="background-color: #FFECB3"> 02 </v-col> </v-row> </v-container> </v-content> </v-main> <!-- フッター(app:コンテンツの幅を自動調整&固定) --> <v-footer app color="#5f5f5f" > <v-spacer /> <span style="color: white"> © 2021 sample.com All Rights Reserved. </span> </v-footer> </v-app> </template>
【6】v-space
* 2つのコンポーネントの間にスペースをとりたい場合に使用
サンプル
<dive> <!-- なんか --> </div> <v-spacer></v-spacer> <dive> <!-- なんか --> </div>
【7】v-img
* 画像表示
サンプル
<v-img alt="Vuetify Logo" class="shrink mr-2" contain src="https://cdn.vuetifyjs.com/images/logos/vuetify-logo-dark.png" transition="scale-transition" width="40" />
【8】v-btn
* ボタン表示するためのコンポーネント
サンプル
<v-btn href="https://github.com/vuetifyjs/vuetify/releases/latest" target="_blank" text > <span class="mr-2">Latest Release</span> <v-icon>mdi-open-in-new</v-icon> </v-btn>
【9】v-icon
* アイコン(Material Design Icons)を表示するコンポーネント
サンプル
<v-icon>mdi-open-in-new</v-icon>
■ 補足:router-xxxx (router-link / router-view) について
* router-link / router-view については、以下の関連記事を参照のこと。
Vue Router ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/12/24/000000
参考文献
https://qiita.com/rubytomato@github/items/07fe07e64482f8f03ef3
https://www.if-blog.site/edgwbs/book_storage_vuetify/
関連記事
Vuetify ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/12/26/000242
Vuetify ~ ユーザへの通知 ~
https://dk521123.hatenablog.com/entry/2021/03/01/225352
Vuetify ~ ローディング中の表示 ~
https://dk521123.hatenablog.com/entry/2021/03/03/111740
Vuetify に関するトラブルシューティング
https://dk521123.hatenablog.com/entry/2021/02/08/000000
Vue Router ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/12/24/000000