#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 /