我是vueJS的新手。
我希望使用vee-validate在映像中添加所需的验证器。
内置的必要验证程序无法工作,所以我创建了一个自定义验证器img_required。
这是我迄今为止所做的。
.vue html部件
<ValidationProvider rules="image|img_required" bail="false" v-slot="{ errors, validate }">
<div class="row row-xs mg-t-20 mx-0">
<label class="col-sm-4 form-control-label">
<span class="tx-danger">*</span> Image:
</label>
<div
@dragover.prevent
@change="validate"
@drop.prevent
class="file-wrapper col-sm-8 mg-t-10 mg-sm-t-0"
>
<div v-if="imgUrl">
<button @click="imageNull" class="img-close">
<b-icon icon="x"></b-icon>
</button>
<img style="height: 127px" :src="imgUrl" />
</div>
<input type="text" hidden v-model="imgUrl" />
<div v-if="!imgUrl" @drop="handleImage($event, 'drop')">
<input
type="file"
class="form-control"
name="file"
accept="image/*"
@change="handleImage($event, 'input'); validate()"
/>
Drop image
</div>
</div>
</div>
<div v-for="error in errors" :key="error">{{ error }}</div>
</ValidationProvider>我不能在输入类型文件中使用 v-model ,所以我创建了一个虚拟隐藏输入字段,并在v-model <input type="text" hidden v-model="imgUrl" />中传递了imgUrl。
imgUrl从文件删除或输入文件获取图像src。
我添加了一个关闭按钮来对imgUrl变量进行空化。
<button @click="imageNull" class="img-close">
<b-icon icon="x"></b-icon>
</button>我将这个imgUrl传递给验证扩展方法。
.vue脚本部分
data() {
return {
imgUrl: ""
}
},
methods: {
handleImage(e, action) {
var file;
if (action == "input") file = e.target.files[0];
else if (action == "drop") file = e.dataTransfer.files[0];
var reader = new FileReader();
reader.onload = (e) => {
this.imgUrl = e.target.result;
};
reader.readAsDataURL(file);
},
imageNull() {
this.imgUrl = "";
},
}这是validation.js文件
extend('img_required', {
validate(imgUrl) {
console.log(imgUrl);
return imgUrl !== "";
},
message() {
return "Image is required!";
}
});在这里,我检查imgUrl是否是空的base64字符串。
当我按下“关闭”按钮时,imgUrl就会无效。
这里的问题是当我打印这个event.target.files.时,它显示了imgUrl

我是vue.js的新手。如果我做错了什么,请告诉我
发布于 2020-09-01 14:08:41
我认为问题是你的handleImage函数不正确
试试这个;
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
this.imgUrl = reader.result;
}; https://stackoverflow.com/questions/63685166
复制相似问题