Перебор фотографий, vue.js

282
22 мая 2018, 17:30

Мне нужно, чтобы при добавление фотографии, отображалось сразу же фотография которую добавили. То есть добавили одну фотографию, она отобразилась, добавили вторую - она отобразилась следующая и т.д. Вот как делал я:

  <input type="file" multiple class="form-control" @change="fieldChange">

vue:

    fieldChange(e){
                        let selectedFiles=e.target.files;
                        for(let i=0;i<selectedFiles.length;i++){
                            this.attachments.push(selectedFiles[i]);
                        }
                        for(let i=0;i<this.attachments.length;i++){
                           var myIt = this.attachments[i];
                        }
                        this.createImages(myIt);
                    },
    createImages(file) {
                    var reader = new FileReader();
                    reader.onload = (e) => {
                        this.images = e.target.result;
                    };
                    reader.readAsDataURL(file);
                },

Тут отображение фото:

  <img class="img-responsive" :src="images" >

Так вот, проблема в том, что я загружаю фотографию, высвечивается первая, потом снова, загружаю вторую - и первая превращается во вторую фотографию, то есть все фотографии становятся последней. Помогите пожалуйста, как можно грамотнее переделать, чтобы высвечивались все загруженные фотографии

Answer 1

Для того, чтобы отобразить список изображений, необходимо этот список записать, например, в массиве.

Для отображения списка изображений используется цикл v-for.

Пример реализации:

var container = new Vue({ 
  el: '#app', 
  data: function() { 
    return { 
      images: [], 
      attachments: [], 
    } 
  }, 
  methods: { 
    fieldChange(e) { 
      let selectedFiles = e.target.files; 
      for (let i = 0; i < selectedFiles.length; i++) { 
        this.attachments.push(selectedFiles[i]); 
      } 
      for (let i = 0; i < this.attachments.length; i++) { 
        var myIt = this.attachments[i]; 
      } 
      this.createImages(myIt); 
    }, 
    createImages(file) { 
      var reader = new FileReader(); 
      reader.onload = (e) => { 
        this.images.push(e.target.result); 
      }; 
      reader.readAsDataURL(file); 
    }, 
  } 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.runtime.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script> 
<div id=app> 
  <input type="file" multiple class="form-control" @change="fieldChange"> 
  <img v-for="(image, index) in images" :key="`image-${index}`" class="img-responsive" :src="image"> 
</div>

jsfiddle: https://jsfiddle.net/Nic34/57xfesja/

READ ALSO
Отправка JSON данных через vue.js

Отправка JSON данных через vue.js

Есть одна функцияЯ получаю JSON с локалхоста на /receive/ , вывожу данные на страницу при помощи vue

218
Версия 2.1.63 сломался параметр json метода geocode

Версия 2.1.63 сломался параметр json метода geocode

Вместо JSON возвращает геообъекты

210
Android webview неверно отображает меню

Android webview неверно отображает меню

Возникла такая проблемаСайт не хочет корректно отображатся в вебвю

209
Событие keydown в js странно себя ведет, почему?

Событие keydown в js странно себя ведет, почему?

Когда я устанавливаю событие для input keydown, то оно срабатывает после второго нажатия на клавишу, приходится использовать событие keyup, но визуально...

211