Загрузка файлов в vuetify
Я использую компоненты vuetify для интерфейса в Vuejs. Я хочу создать форму регистрации Пользователя с загрузкой файла. Я могу создать форму, используя v-text-field
в vuetify, но как загрузить файл. Какой компонент использовать или любым другим альтернативным способом.
2 ответов
Vue JS не имеют функции ввода файлов до сегодняшнего дня, поэтому вы можете настроить v-text-field для работы как поле ввода изображения. Концепция состоит в том, чтобы создать поле ввода файла, а затем скрыть его с помощью css и добавить событие в V-text-field, чтобы вызвать это конкретное поле ввода файла для загрузки изображения. Я прикрепил фрагмент, пожалуйста, играйте с этим, и у меня также есть скрипка, созданная с помощью vue и vuetify, посетите здесь. Спасибо!
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>
Это то, что мы добавим в будущем, но не в настоящее время. Существует обсуждение github с несколькими пользователями, публикующими свои реализации, которые они используют в настоящее время,https://github.com/vuetifyjs/vuetify/issues/238