J'utilise des composants vuetify pour front-end dans Vuejs. Je souhaite créer un formulaire d’enregistrement d’utilisateur avec téléchargement de fichier. Je suis capable de créer un formulaire en utilisant v-text-field
in vuetify mais comment télécharger le fichier. Quel composant utiliser ou tout autre moyen alternatif.
Vue JS n'a pas de fonction de saisie de fichier jusqu'à aujourd'hui, vous pouvez donc Tweak v-text-field fonctionner comme un champ de saisie d'image. Le concept est de créer un champ de saisie de fichier, puis de le masquer à l'aide de css, et d'ajouter un événement dans v-text-field pour déclencher le chargement de l'image dans ce champ de saisie de fichier spécifique. J'ai joint snippet s'il vous plaît, jouez avec ça, et j'ai aussi un violon créé avec vue et vuetify, visitez ici . Merci!
new Vue({
el: '#app',
data: () => ({
title: "Image Upload",
dialog: false,
imageName: '',
imageUrl: '',
imageFile: ''
}),
methods: {
pickFile () {
this.$refs.image.click ()
},
onFilePicked (e) {
const files = e.target.files
if(files[0] !== undefined) {
this.imageName = files[0].name
if(this.imageName.lastIndexOf('.') <= 0) {
return
}
const fr = new FileReader ()
fr.readAsDataURL(files[0])
fr.addEventListener('load', () => {
this.imageUrl = fr.result
this.imageFile = files[0] // this is an image file that can be sent to server...
})
} else {
this.imageName = ''
this.imageFile = ''
this.imageUrl = ''
}
}
}
})
<link href='https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Material+Icons' rel="stylesheet">
<link href="https://unpkg.com/vuetify/dist/vuetify.min.css" rel="stylesheet">
<div id="app">
<v-app>
<v-toolbar dark color="primary">
<v-toolbar-side-icon></v-toolbar-side-icon>
<v-toolbar-title class="white--text">{{ title }}</v-toolbar-title>
<v-spacer></v-spacer>
<v-btn icon @click="dialog = !dialog">
<v-icon>link</v-icon>
</v-btn>
</v-toolbar>
<v-content>
<v-container fluid>
<v-flex xs12 class="text-xs-center text-sm-center text-md-center text-lg-center">
<img :src="imageUrl" height="150" v-if="imageUrl"/>
<v-text-field label="Select Image" @click='pickFile' v-model='imageName' prepend-icon='attach_file'></v-text-field>
<input
type="file"
style="display: none"
ref="image"
accept="image/*"
@change="onFilePicked"
>
</v-flex>
<v-dialog v-model="dialog" max-width="290">
<v-card>
<v-card-title class="headline">Hello World!</v-card-title>
<v-card-text>Image Upload Script in VUE JS
<hr>Yubaraj Shrestha
<br>http://yubarajshrestha.com.np/</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="green darken-1" flat="flat" @click.native="dialog = false">Close</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</v-container>
</v-content>
</v-app>
</div>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vuetify/dist/vuetify.js"></script>
C'est quelque chose que nous ajouterons à l'avenir, mais pas actuellement. Il y a une discussion sur github avec plusieurs utilisateurs publiant leurs implémentations qu'ils utilisent actuellement, https://github.com/vuetifyjs/vuetify/issues/238
Un truc facile, c'est:
<v-btn color="success" @click="$refs.inputUpload.click()">Success</v-btn>
<input v-show="false" ref="inputUpload" type="file" @change="yourFunction" >
ça ressemble à une blague mais ça marche.
Il suffit de mettre une entrée avec les propriétés suivantes
Puis créez un bouton qui, lorsque vous cliquez dessus, clique sur le bouton de téléchargement