遇到的问题
平常大家都会遇到写表单,有表单就会有表单验证。然后有时候我们需要用到上传图片。这时候问题来了,其他的表单比如输入框,下拉框的验证都比较容易,只要按照 elementPlus 官网上的相应的配置 prop 和 rules 然后就可以实现验证。
1 2 3 4 5 6 7 8 9 10 11 12
| const rules = reactive({ deviceSn: [{ required: true, message: "设备编码不能为空", trigger: "blur" }], deviceType: [ { required: true, message: "设备类型不能为空", trigger: "change" }, ], deviceName: [{ required: true, message: "设备名不能为空", trigger: "blur" }], netMode: [{ required: true, message: "联网方式不能为空", trigger: "change" }], productIdOrTemplateId: [ { required: true, message: "设备模板不能为空", trigger: "change" }, ], imgUrl: [{ required: true, message: "请选择图片", trigger: "change" }], });
|
这里要注意trigger触发器,不同的表单类型触发器是不同的。输入框就是 blur,下拉框就是 change。但是这时候就有问题,因为我们用的上传el-upload,与其他基础的表单控件不一样,没办法监听到它。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <el-form-item prop="imgUrl"> <div class="uploader-wapper"> <el-upload class="avatar-uploader" :class="!form.imgUrl ? 'upload-border' : ''" action="#" :before-upload="beforeAvatarUpload" :show-file-list="false" :http-request="handleUpload" > <img v-if="form.imgUrl" :src="form.imgUrl" class="avatar" /> <el-icon class="avatar-uploader-icon" v-else><Upload /></el-icon> <span class="change-text" v-if="form.imgUrl">更换</span> </el-upload> </div> </el-form-item>
|
那我们应该如何进行验证呢?其实很容易,@change=”handleChange”我们给上传控件给一个change事件。然后我们实现一下这个方法。
1 2 3 4
| const handleChange = () => { formRef.value.validateField('imgUrl'); };
|
我们手动触发一下表单校验,这样就能触发上传文件后触发验证。