javascript - VueJS3 + Typescript - Les fil fra filinnput
Jeg vil laste opp en fil, men jeg kan ikke få tilgang med v-model
VueCompilerError: v-model kan ikke brukes på filinntastinger siden de er skrivebeskyttet. Bruk en v-on:change-lytter i stedet.
Så, jeg har endret v-model til v-on:change som koden nedenfor, men jeg vet ikke hvordan jeg gjør dette
<input
type="file"
name="file"
v-on:change="uploadFile"
style="display: none; border: none"
/>
Jeg leste en stor liste med eksempler, men ingen fungerte.
Mine data (Vet ikke om det er riktig):
data() {
return {
file: null as unknown as File,
};
},
Svar #1
Et grunnleggende eksempel kan se slik ut
<input type="file" @change="onFileChange">
JavaScript-versjon
methods: {
onFileChange(event) {
let files = event.target.files || event.dataTransfer.files;
if (!files.length) return;
doSomethingWithTheFile(files[0]);
},
}
TypeScript-versjonen kan se slik ut
interface HTMLInputEvent extends Event {
target: HTMLInputElement & 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])
},
},
Svar #2
Hvordan ser din uploadFile ut?
Det enkleste kan være å erklære det for å ta filene direkte:
async uploadFiles(fileList: Array<File>) {
for (const file of fileList) {
// do something with the file
Og kall det på denne måten:
v-on:change="uploadFiles($event.target.files)"
