element-ui资料
官网地址
常用组件
1.Select 选择器
当选项过多时,使用下拉菜单展示并选择内容。
<el-select v-model="selectValue" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
options是下拉选中所有备选项,备选项的标签名是label,对应的数据是value。
选中的数据是selectValue
编辑时,存入v-model数据selectValue里的是:value的数据,选中的数据结构是个数组。如果是多选的情况,选中的数据就会组成一个含多个元素的数组。
回显时,v-model的数据selectValue是由:label的数据组成的,只有由:label组成的数据组成,回显时才是label数据。
比如options:
options: [{
value: '10',
label: '汉语'
}, {
value: '20',
label: '英语'
}, {
value: '30',
label: '日语'
}],
点击英语,此时selectValue=[‘20’];回显时要求selectValue=[‘英语’],而不是selectValue=[‘20’]
实际开发
如果select选择器既要新增数据,又要修改编辑,此时:value和:label都要采用:label后的值,这样选中的值就是label组成的数组,回显后再次编辑保存也是label组成的数组。可以统一处理。
如果后端需要:value值,可以对options进行循环过滤。
示例:
<el-select ref="tagList" clearable v-model= "tagList"
placeholder='请选择标签'
@change="validTag()">
<el-option v-for='(item, index) in allTagList'
:key="index + '1'"
:label='item.value'
:value='item.value'
></el-option>
</el-select>
// 转换标签结构
let tagArr = [];
// console.log("选中的", this.tagList);
if (this.tagList.length > 0) {
this.allTagList.forEach(item => {
if (this.tagList.indexOf(item.value) > -1) {
let tagList = {
tagName: item.value,
tagCode: item.code
};
tagArr.push(tagList);
}
});
}
this.form.tagList = tagArr;
校验
参考资料
rule详细说明、官方校验器、自定义校验规则
rule组成
rule项,即规则数组的元素。这里先就上述rules的各元素项解析一下:
required:表示是否必须有值,取值为true/false,如为true,表示必须有值,如果无值,则校验不通过;如为false,则允许无值,但在有值的情况下,不影响其它规则的使用。
message:提示消息,在校验不通过时提示此消息。
trigger:触发方式,取值为blur/change,blue表示失去焦点,一般在input组件中使用;change为值改变,一般在选择框中使用。
min:字符串最小长度。
max:字符串最大长度。
自定义校验规则
定义校验规则
入参通常为三个值:rule, value, callback
callback用于返回校验结果,其中callback(new Error(‘内容’));中的“内容”会作为警告提示信息。
定义校验:
let validCertificateDate = (rule, value, callback) =>{
console.log("value:", value);
if(value == undefined || value == 'Invalid date'){
callback(new Error('证书有效期不能为空'));
}
callback();
};
使用:
this.rules.certificateDate = [
{validator: validCertificateDate, required: true, trigger: 'blur'}
];
动态修改校验规则
对组件进行校验时,可以动态修改校验规则。
// 表单
<el-form :model="form" :rules="rules" ref="form" inline-message>
</el-form>
// 默认校验规则
rules: {
title: [
{required: true, message: '标题不可为空', trigger: 'blur'},
],
tagList: [
{required: true, message: '请选择标签', trigger: 'change'},
],
},
// 动态修改:将tagList的校验规则置空
this.$set(this.rules, "tagList", "");
下拉菜单的校验规则
如果只是使用最简单的下拉菜单,下拉菜单与其他表单输入项不联动,直接在rule里面设置即可。
type:[
{required: true, message: '类型不能为空', trigger: 'blur'}
]
一旦下拉菜单手其他用户输入项的影响,此时校验非常容易出错,此时不再使用rule校验,而是提交表单时自定义校验
if(this.type){
this.$message({type: 'warning', message: "请选择类型!"});
return false;
}
element-ui表单中关于校验的属性
在标签内加上required属性绑定并且设置值布尔值为true即可。
<el-form-item label="用户名" label-width="70px" :required="true">
<el-input v-model="form.name" autocomplete="off">
</el-input>
</el-form-item>