九保すこひ@フリーランスエンジニア|累計300万PVのブログ運営中
さてさて、これまでこのブログでは実際に開発した様々なソースコードを公開してきました。
そして、その中でも特によくダウンロードされているのが、たった2ステップ!Vue.js で選択画像をプレビューする方法(サンプルDL可)で公開しているソースコードです。
そしてプレビュー表示は意外と需要が多いんだなと感じたので、この機能をより簡単に実装できる独自のVueディレクティブ “v-preview-input” を作り、npmとGitHubで公開することにしました。
今回はその使い方をご紹介します。
デモページ
v-preview-imageのデモページを用意しました。
ぜひ体験してみてください。
インストールする
npm
でパッケージを公開しているので、次のコマンド一発でインストールが完了します。
npm i v-preview-input
また、npm
ではなくgit
を使う方法でもOKです。
git clone https://github.com/SUKOHI/v-preview-input.git
準備
次のようにVue本体と同じくv-preview-input.js
を読み込んでください。
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.min.js"></script> <script src="/******/v-preview-input/v-preview-input.js"></script>
使い方
選択する画像が1枚だけの場合
まずdata
に画像データが格納される変数(ここではprofileImage
)を登録します。
new Vue({ el: '#app', data: { profileImage: null } })
そして、<input type="file">
タグにv-preview-input
というディレクティブを追加し、ここへさっき追加した変数を設定します。
<input type="file" accept="image/*" v-preview-input="profileImage">
次に実際にプレビュー画像が表示される部分です。
<img :src="profileImage">
:src
に変数を指定するだけでOKです。
選択する画像が複数の場合
こちらもまずdata
に変数を作りますが、こちらは配列になります。
new Vue({ el: '#app', data: { profileImages: [] } })
そして、<input>
タグも1枚のときとほぼ同じですが、multiple
をつけるのを忘れないでください。
<input type="file" accept="image/*" v-preview-input="profileImages" multiple>
では、最後に画像プレビュー部分です。
選択された画像データは配列になって変数へ格納されるので、次のようにv-for
などを使って表示してください。
<img v-for="profileImage in profileImages" :src="profileImage">
おわりに
ということで今回は公開したパッケージの紹介をしました。
ちなみに、元々は変数を指定する形ではなく、v-preview-input
とv-preview-image
というディレクティブを対にして対応させるつもりでしたが、こうすると複数ファイルの場合に対応できません。(もしかしてVueでプログラム的ににv-for
を設定できるのでしょうか??)
<input type="file" v-preview-input="'profile'"><br> <img v-preview-image="'profile">
また、独自コンポーネントを作ってもよかったのですが、スタイルシートやクラスを設定しにくくなってしまったり、可読性が悪くなるためこちらも断念。結局今回の形に落ち着きました。
今後もし何かいいアプローチが思いついたら更新していくつもりです。
ではでは〜!