У меня есть файл загрузки документа из нескольких загрузок, который отображает имя файла и параметр выбора, где пользователь должен выбрать тип документа для загруженного файла. Функция загрузки работает нормально, но есть проблема с опцией выбора. Поскольку в загруженном файле есть цикл for, всякий раз, когда я выбираю вариант типа документа, значение изменяется для всех выбранных типов документов.
<input
ref = "filebtn"
type = "file"
multiple
@input = "upload"
/>
<div
v-for = "file in files"
:key = "file.name"
>
<div class = "d-flex justify-space-between">
<div>
{{ file.name }}
</div>
</div>
<div v-if = "files.length >= 1">
<v-select
v-model = "documentTypeModel"
:items = "documentType"
></v-select>
</div>
</div>
И сценарий
props: {
multiple: {
type: Boolean,
required: false,
},
},
data() {
return {
documentTypeModel: null,
documentType: [
'Item 1',
'Item 2',
'Item 3',
],
}
},
computed: {
filebtn: {
cache: false,
get() {
return this.$refs.filebtn
},
},
}
methods: {
upload() {
const files = this.filebtn.files ?? []
for (let i = 0; i < files.length; i++) {
if (this.multiple) {
// eslint-disable-next-line vue/no-mutating-props
this.files.splice(0, this.files.length)
}
}
},
}
Попробуйте использовать индекс из цикла в v-модели:
new Vue({
el: '#demo',
vuetify: new Vuetify(),
data() {
return {
documentTypeModel: [],
documentType: [
'Item 1',
'Item 2',
'Item 3',
],
multiple: true,
files: []
}
},
computed: {
filebtn: {
cache: false,
get() {
return this.$refs.filebtn
},
},
},
methods: {
upload() {
this.files = [...this.filebtn.files] ?? []
for (let i = 0; i < this.files.length; i++) {
if (this.multiple) {
this.files = this.files.splice(0, this.files.length)
}
}
},
}
})
<link href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/vuetify.min.css" rel = "stylesheet">
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/vuetify.js"></script>
<div id = "demo">
<v-app>
<v-main>
<v-container>
<input
ref = "filebtn"
type = "file"
multiple
@input = "upload"
/>
<div
v-for = "(file, i) in files"
:key = "file.name"
>
<div class = "d-flex justify-space-between">
<div>
{{ file.name }}
</div>
</div>
<v-select
v-model = "documentTypeModel[i]"
:items = "documentType"
></v-select>
</div>
</v-container>
</v-main>
</v-app>
</div>