I wan't to display multiple files name in my template i'm do that:
<div v-for="(image, index) in imagesReturn" :key="index">
<span>{{ image.name }}</span>
</div>
<div>
<generic-input
v-model="imagesReturn"
type="file"
multiple
@change="addFiles"
>
add files
</generic-input>
</div>
<script>
data() {
return{
imagesReturn: [];
}
}
methods: {
addFiles(e) {
let selectedFiles = e.target.files;
for (let img of selectedFiles) {
this.imagesReturn.push(img.name);
}
}
}
</script>
Iwant to display files name in array imagesReturn but i have error when i push inside array error this.imagesReturn.push is not a function i don't know why and i can not display files name in my template. Please thank you.
CodePudding user response:
The js part seems fine to me. I guess the problem goes from the generic-input component.
Typically, when the error something.push is not a function occurred, it always means something is not an Array.
Since imagesReturn is two-way binding using v-model, it is possible that the generic-input component alters imagesReturn from [] to ''(empty string) or null after mounted.
So I suggest you console.log(this.imagesReturn) inside addFiles() to see when the value changes (or watch imagesReturn).
I don't know if the generic-input component belongs to a UI framework or is created by yourself. If belongs to a UI framework, you need to read the documentation carefully about @change="function(params)" event, especially its params. If it's wrote by yourself, you need to check what value it will pass in the component when emit('change', value).
