#javascript #typescript #vue.js #vuejs3
Вопрос:
Я хочу загрузить какой-то файл, но не могу получить доступ с помощью v-model
Ошибка VueCompilerError: v-модель нельзя использовать при вводе файлов, так как они доступны только для чтения. Вместо этого используйте v-on:измените прослушиватель.
Итак, я изменил код v-model
на v-on:change
«нравится» ниже, но я не знаю, как это сделать
<input
type="file"
name="file"
v-on:change="uploadFile"
style="display: none; border: none"
/>
Я прочитал большой список примеров, но ни один из них не сработал.
Мои данные (Idk, если это правильно):
data() {
return {
file: null as unknown as File,
};
},
Ответ №1:
Основной пример может выглядеть так
<input type="file" @change="onFileChange">
Версия JavaScript
methods: {
onFileChange(e) {
let files = e.target.files || e.dataTransfer.files;
if (!files.length)
return;
doSomethingWithTheFile(files[0]);
},
}
Версия машинописного текста может выглядеть следующим образом
interface HTMLInputEvent extends Event {
target: HTMLInputElement amp; EventTarget
}
methods: {
onFileChange(event: HTMLInputEvent | DragEvent) {
let files =
(event as HTMLInputEvent).target.files ||
(event as DragEvent).dataTransfer.files
if (!files.length) return
doSomethingWithTheFile(files[0])
},
},
Комментарии:
1. typescript возвращает много ошибок, потому что Idk, кто такой
e
иfiles
? что это заfile
тип такойFile
?2. Я добавил версию машинописного текста @ThiagoValente
Ответ №2:
Как ты uploadFile
выглядишь?
Проще всего может быть объявить, что он непосредственно принимает список файлов:
async uploadFiles(fileList: Array<File>) {
for (const file of fileList) {
// do something with the file
И назовем это так:
v-on:change="uploadFiles($event.target.files)"