V-model 指令不支持输入类型="file"
V-model directives don't support input type="file"
我正在尝试更新我的数据库中的用户配置文件数据,但我卡在了用户配置文件图片上。我不能使用 v-model 进行绑定,并且使用 v-on:change 它也不起作用。到目前为止,这是我的代码,它工作正常,唯一的问题是绑定。
<template>
-----
<div v-if="!image">
<h2>Select an image</h2>
<input type="file" @change="onFileChange" /> ---->here I would like to use the v-model but can't use it on input type="file"
</div>
<div v-else>
<img :src="image" />
<button @click="removeImage">Remove image</button>
</div>
<input
type="text"
placeholder="Userame"
v-model="user.username"
required
/>
<button
type="button"
class="btn btn-outline-warning waves-effect"
aria-label="Left Align"
@click.prevent="updateProfile(user)"
>
Update profile
</button>
---
</template>
<script>
export default {
data: function () {
return {
user: {},
image: ''
};
},
methods: {
onFileChange(e) {
var files = e.target.files || e.dataTransfer.files;
if (!files.length)
return;
this.createImage(files[0]);
},
createImage(file) {
var image = new Image();
var reader = new FileReader();
var vm = this;
reader.onload = (e) => {
vm.image = e.target.result;
};
reader.readAsDataURL(file);
console.log(file.name);
},
removeImage: function (e) {
this.image = '';
},
updateProfile() {
store
.dispatch("updateProfile", {
username: this.user.username,
email: this.user.email,
profileImage: this.file ------>I need it for the binding here
</script>
您忘记将文件绑定到 this.file
。将您的 onFileChange
方法更新为此,它将起作用。
注意:v-model
仅适用于使用 value
绑定的 input
,其中输入类型文件不使用 input value
,使用 input type file
与 v-model
onFileChange(e) {
var files = e.target.files || e.dataTransfer.files;
if (!files.length) return;
this.file = files[0]
this.createImage(this.file);
},
我正在尝试更新我的数据库中的用户配置文件数据,但我卡在了用户配置文件图片上。我不能使用 v-model 进行绑定,并且使用 v-on:change 它也不起作用。到目前为止,这是我的代码,它工作正常,唯一的问题是绑定。
<template> ----- <div v-if="!image"> <h2>Select an image</h2> <input type="file" @change="onFileChange" /> ---->here I would like to use the v-model but can't use it on input type="file" </div> <div v-else> <img :src="image" /> <button @click="removeImage">Remove image</button> </div> <input type="text" placeholder="Userame" v-model="user.username" required /> <button type="button" class="btn btn-outline-warning waves-effect" aria-label="Left Align" @click.prevent="updateProfile(user)" > Update profile </button> --- </template> <script> export default { data: function () { return { user: {}, image: '' }; },
methods: { onFileChange(e) { var files = e.target.files || e.dataTransfer.files; if (!files.length) return; this.createImage(files[0]); }, createImage(file) { var image = new Image(); var reader = new FileReader(); var vm = this; reader.onload = (e) => { vm.image = e.target.result; }; reader.readAsDataURL(file); console.log(file.name); }, removeImage: function (e) { this.image = ''; }, updateProfile() { store .dispatch("updateProfile", { username: this.user.username, email: this.user.email, profileImage: this.file ------>I need it for the binding here
</script>
您忘记将文件绑定到 this.file
。将您的 onFileChange
方法更新为此,它将起作用。
注意:v-model
仅适用于使用 value
绑定的 input
,其中输入类型文件不使用 input value
,使用 input type file
与 v-model
onFileChange(e) {
var files = e.target.files || e.dataTransfer.files;
if (!files.length) return;
this.file = files[0]
this.createImage(this.file);
},