1.表单代码
<el-form :model="addForm" size="mini" :rules="rules" ref="addForm">
<el-row>
<el-col :span="24">
<el-form-item label="附件" prop="fileList">
<el-upload ref="fileupload" :data="addForm" accept=".doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.jpg,.png"
action="" :on-preview="handlePreview" :on-remove="handleRemove"
:before-upload="beforeUpload" :on-success="successtp" :on-error="errortp" :auto-upload="false"
:file-list="fileList" :on-change="fileChange">
<el-button slot="trigger" size="mini" type="primary">选取文件</el-button>
</el-upload>
</el-form-item>
</el-col>
</el-row>
</el-form>
2.rules验证,针对上方表单中的prop="fileList" 这个名字是自定义的,上下文对应即可
rules: {
fileList: [{ required: true, validator: validateFileUrl, trigger: 'change' }]
},
3.自定义验证方法,写在data()中
data() {
//定义校验规则
let validateFileUrl = (rule, value, callback) => {
if (this.fileList.length < 1) {//我控制了FileList 长度代表文件个数
callback(new Error("请上传文件"))
} else {
callback()
}
}
4. 对于this.fileList(全局变量)的控制,此处的名称是实质的针对文件的变量,与上方校验的名称无关
// 文件列表移除文件时的钩子
handleRemove(file, fileList) {
this.fileList = [];
},
//上传文件时以及更改时进入
fileChange(file, fileList) {
this.fileList = fileList;
},
5.由于自定义的触发,比较费劲。。。,所以选择watch辅助一下,加了watch之后,当fileList变量变动之后,就会复发自定义的校验,展示校验信息。
watch: {
fileList(nowval, oldval) {
this.$refs['addForm'].validateField('fileList');
}
},
至此,上传文件校验全程配置结束。
由于表单验证我的需求就是表单开,验证需要在,所以我没有清理验证。
如需清理,可以使用此行代码
this.$refs['addForm'].clearValidate();
本文介绍了一个基于Element UI的文件上传组件实现,包括表单代码、自定义验证规则及全局文件列表控制等内容。通过具体示例展示了如何进行文件类型限制、预览、移除等操作,并实现了对文件列表的实时验证。
1万+





