LoginSignup
31
23

More than 3 years have passed since last update.

[Vue.js]input fileで選択した画像のプレビューを表示する

Last updated at Posted at 2019-07-07

Vue.jsでinput type="file"で選択した画像プレビューを表示

Example1

サンプル

<template>
  <div>
     <input type="file" ref="file" @change="setImage"/>
     <img :src="data.image">
  </div>
</template>
<script>
export default {
  data() {
    return {
      data: {
        image: "",
        name: "",
      }
    };
  },
  methods: {
    setImage(e) {
      const files = this.$refs.file;
      const fileImg = files.files[0];
      if (fileImg.type.startsWith("image/")) {
        this.data.image = window.URL.createObjectURL(fileImg);
        this.data.name = fileImg.name;
        this.data.type = fileImg.type;
      }
    },

  }
};
</script>

初めに、<input type="file" ref="file" />でref=で適当に名前をつけてあげます。
そして@changeで画像の選択時にsetImageを発火させています。
this.$refs.fileで画像のようなdomが参照できるのでそこから画像dataをひっぱって来るようにしています。
スクリーンショット 2019-07-08 7.27.44.png

最後に、window.URL.createObjectURL(file)でsrcに指定するURLを生成しています。スクリーンショット 2019-07-08 7.33.28.png
こんな感じでプレビューを表示させてあげれます。

Example2

先ほどはthis.$refs.を使った方法になりますが、eventをとってきてやる方法でもいいかな?

<template>
  <div>
     <input type="file" @change="setImage($event)"/>
     <img :src="data.image">
  </div>
</template>
<script>
export default {
  data() {
    return {
      data: {
        text: "",
        image: "",
        name: "",
      }
    };
  },
  methods: {
    setImage(event) {
      const file = (e.target.files || e.dataTransfer)[0]
      if (file.type.startsWith("image/")) {
        this.data.image = window.URL.createObjectURL(file);
        this.data.name = file.name;
        this.data.type = file.type;
      }
    },

  }
};
</script>

最後に

もっと簡単な方法があればご教授ください。
ありがとうございました。

31
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
23