Сохранение типа изображения при загрузке изображения с помощью vue.js

#jquery #vue.js #vuejs2 #vue-component #vuex

#jquery #vue.js #vuejs2 #vue-компонент #vuex

Вопрос:

Я пытаюсь загрузить изображение с помощью vue.js это будет несколько изображений, и пользователь может получить предварительный просмотр этих изображений, но я также хочу сохранить тип изображения, т.Е. Пользователь может установить основное изображение из групп загружаемых изображений, для этого я установил переключатель, по умолчанию первый будетпервичные и другие изображения будут вторичными. Мы высоко ценим любую помощь в отношении того, как сохранить тип с изображением.

Скрипка JS :

https://jsfiddle.net/jfwv04mu/

HTML:

 <div id="app">
  <h2>Images:</h2>
  <div class="row m-2">
    <div v-for="(data, index) in rawData" class="image-input image-input-active d-flex">
      <div class="image-preview">
         <img class="img-responsive h-100" :src="data">
        <button class="btn btn-xs remove-file" @click="removeFile(index)">
          <i class="fa fa-trash " ></i>
        </button>
      </div>
       <input type="radio" name="imgType">
  </div>
 
  <div class="image-input image-input-tbd d-flex" v-if="this.files.length < this.option.maxFileCount">
    <div class="image-preview dropzone d-flex justify-content-center align-items-center" @drop="loaddropfile" @click="openinput">
      <i class="fa fa-plus text-success"></i>
    </div>
    <input type="file" class="d-none" id="vue-file-upload-input" @change="addImage">
  </div>
  </div>
  <div class="row justify-content-center m-2">
    <button class="btn btn-primary" @click="upload">Upload</button>
  </div>
  
  <div class="row">
  
  
  <div id="dropContainer" style="border:1px solid black;height:100px;">
   Drop Here
</div>
  Should update here:
  <input type="file" id="fileInput" />
  </div>
</div>
  

Vue:

 new Vue({
  el: "#app",
  data() {
    return {
      option: {
        maxFileCount: 3
      },
      files:[],
      rawData: [],
    }
  },
  methods: {
    loaddropfile: function(e) {
        e.preventDefault()
      e.stopPropagation()
        alert('ok')
        console.log(e)
    },
    openinput: function() {
        document.getElementById("vue-file-upload-input").click();
    },
    addImage: function(e) {
        const tmpFiles = e.target.files
      if (tmpFiles.length === 0) {
        return false;
      }
      const file = tmpFiles[0]
      this.files.push(file)
      const self = this
        const reader = new FileReader()
      reader.onload = function(e) {
        self.rawData.push(e.target.result)
      }
      reader.readAsDataURL(file)
    },
    removeFile: function(index) {
        this.files.splice(index, 1)
      this.rawData.splice(index, 1)
      document.getElementById("vue-file-upload-input").value = null
    },
    upload: function() {
        alert('Check console to see uploads')
        console.log(this.files)
    }
  },
  mounted(){
  dropContainer.ondragover = dropContainer.ondragenter = function(evt) {
  evt.preventDefault();
};

dropContainer.ondrop = function(evt) {
  // pretty simple -- but not for IE :(
  fileInput.files = evt.dataTransfer.files;
  evt.preventDefault();
};
  }
})
  

Комментарии:

1. Вы имеете в виду <input type="file" accept="image/*" > ?

2. @Mohsen: я хочу добавить еще один переключатель в каждое поле, который будет распознавать изображение, которое я хочу сделать основным для слайдера, например. если я проверил второе изображение, то это второе изображение будет основным, его img_type будет сохранен 1 в базе данных и будет отображаться вверху.

Ответ №1:

Привязать :value="index" и добавить v-model="primaryimag" к переключателям для сохранения выбранного изображения

 <input type="radio" name="imgType" :value="index" v-model="primaryimg">
  

проверьте обновленную скрипку JS: https://jsfiddle.net/6hvk4dtq /