【问题标题】:Multiple image preview using V-for when uploading (Vue JS)上传时使用 V-for 预览多张图片(Vue JS)
【发布时间】:2019-09-10 19:22:21
【问题描述】:

使用 :ref 时图像未在循环中显示

我正在使用 FileReader() 来读取字段。

Vue 组件

<div v-for="(image, index) in imgFile" :key="index">
<img :ref="'image'+parseInt( index )">
{{image.name}}
</div>
<input type="file" class="file-upload-default" @change="onFileChange" multiple>
<span style="cursor:pointer" class="file-upload-browse">
<img src="/addmore.png" height="50" width="50">
</span>

export default{
onFileChange(e){
var selectedFiles = e.target.files;
for (var i=0; i < selectedFiles.length; i++){
  this.imgFile.push(selectedFiles[i]);
}

if (selectedFiles) {
  for (var i=0; i < this.imgFile.length; i++){
    let reader = new FileReader();
    reader.addEventListener('load', function(){          
     this.$ref["image"+parseInt( i )][0].src = reader.result;         
   }.bind(this), false); 
     reader.readAsDataURL(this.imgFile[i]);
   }
     }
   }
 }

我想显示从 eventListener 中选择的图像。

【问题讨论】:

  • key 在您的模板中的&lt;img&gt; 标记中是什么?
  • 您可能还想使用this.$refs 而不是this.$ref
  • ...将逻辑封装到自己的组件中可能会更好,更容易。
  • 我能理解。能详细点吗?
  • 抱歉,key 是错字。我编辑了我的问题

标签: javascript vue.js


【解决方案1】:

通过将逻辑拆分为两个组件来改进您的架构。你可以这样做:

<template>
  <div class="parent-component">
    <image-component :image="image" v-for="(image, index) in images" :key="index" />
  </div>
</template>

<script>
export default {
  name: 'ParentComponent',
  data () {
    return {
      images: []
    };
  }
};
</script>
<template>
  <div class="image-component">
    <img ref="imgElement">
    {{ image.name }}
  </div>
</template>

<script>
export default {
  name: 'ChildComponent',
  props: {
    image: {
      type: Object,
      required: true
    }
  },
  methods: {
    ...
  },
  mounted () {
    // you don't have to loop here, because in the scope of the image-component,
    // you only have one `<img>`-tag. the loop is in the parent component
    console.log(this.$refs.imgElement);
  }
};
</script>

【讨论】:

  • 这样,你只需要关心一个图像,而不是总是循环并有一个索引。如果要将对象传递给父元素,可以使用this.$emit('an-event', data); 并在&lt;image-component @an-event="method($event)"&gt; 上的父元素中捕获它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 2014-01-13
  • 1970-01-01
  • 2015-07-22
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多