はじめに
最近とある機能でVuetifyを使う機会がありました。
初めての使用だったので色々わからないことも多く公式ドキュメントをひたすら行ったり来たりしていました。
今回はその時調べたことなどをメモ的に置いておきます。どなたかの参考になれば幸いです。
環境
Vue v2.6.14
Vuetify v2.5.10
レイアウト編
v-col ? v-flex ?どちらを使うべき?
Vuetifyのレイアウトについてネットで調べるとv-col
やv-flex
というコンポーネントが出てきます。
これらコンポーネントはグリッドレイアウトを作るときに主に使いますがどれを使えばいいの?と迷うかもしれません。
結論から言うと、最新のバージョンではv-col
を使えば問題ありません。(v-flexを使うこともできます)
1.5系から2.0系へのアップデートで以下のように置き換わっています。
v-layout --> v-row
v-flex --> v-col
アイコン付きボタンを作るときのひと手間
Vuetifyではボタンはv-btn
、アイコンはv-icon
を使います。シンプルに作るなら以下のような構成になると思います。
<v-btn><v-icon>mdi-plus</v-icon>登録する</v-btn>
アイコンが左側にあるときv-icon
に対してleft props
を設定するとアイコンに対して余白などをいい感じに調整してくれます。
<v-btn><v-icon left>mdi-plus</v-icon>登録する</v-btn>
このように組み合わせる際にいい感じに見た目を調整してくれるpropsが他にもコンポーネントに用意されていたりするので、知っておくとスマートに書けます。
通知のコンポーネントどれ使う?
何かしらのユーザー操作の後に成功や失敗を通知したい場合はsnackbars
を使いましょう
小窓を開いてユーザーに何かしらのタスク操作や重要な情報の確認・意思決定を促す場合はdaialogs
を使いましょう
それ以外のアプリケーション側からのお知らせはalerts
を使いましょう。
Vuetifyはマテリアルデザインを採用しているのでマテリアルデザインの文脈に沿った使い方をするのがベターです。
要望・トラブル解決編
テキストフィールドのカウンターで特定の文字列を省いた文字数を使いたい
テキストフィールドでv-text-field
を使いカウンターを表示している場合の話です。
空白や特定の記号があるとその分の文字数がカウントされてしまうので省きたいという話だったのですが、v-text-filed
にはしっかりと用意されていました。
couter-value props
に関数を渡すことでやりたいことが出来ます。
以下の例は正規表現で空白を削除した文字数を返すようにしています。
<v-text-field
value="text"
counter="10"
:counter-value="v => v.replace(/\s+/g, '').length"
></v-text-field>
v-checkboxを使っている時に:valueが上手く動作しない
v-model
を使わず、:value
を使いたいシーンがあったのですがv-checkbox
では意図した動きにならず困りました。結論から言うとinput-value props
を使うことで解決できました。
<v-checkbox
:input-value="checked"
></v-checkbox>
v-checkbox
の場合は、v-model
を input-value
と@change
のように分解できます。
以下の記事が参考になりました。
おわりに
今回初めて触ってみましたが、複雑な要件ではない管理画面などをサッと作るのにVuetifyという選択肢はありだなと思いました。
来年Vue3に対応したVuetify3が正式リリースされる予定なのでこちらも楽しみです。