最近在学习饿了么团队组件库element-ui ~ 留几句小感言吧
el-form 标签,就是js表单的内核,包裹成组件样式。
大致架构为
el-form
–el-form-item
–el-XXX
这样的结构,内层表单元素由一个个的el-form-item包裹住。
个人在学习开发过程中认为比较有用和必要的几个组件属性
–el-form标签的 label-width 属性:用于设置el-form-item的label字段的宽度,el-form为全局设置,也可以单独在el-form-item中单独设置每一个。
–el-form-item的label属性,用于给表单域命名,表明该区域是填写什么内容得~
–el-form 的rules 属性,这个是重中之重,传入一个rules对象,该对象为表单域的填写规则的集合。相对应的在每一个el-form-item中有一个prop属性,对应相应的rules相对应的属性描述的规则。如下:
表单部分:注意el-form的rules属性 以及el-form-item的prop属性
<el-form :model='movie' ref='form' size="samll" label-position='left' :rules='rules'>``
<el-row :gutter='15'>
<el-col :span='12'>
<el-form-item label='影片名称' label-width="80px" prop="name">
<el-input v-model="movie.name"></el-input>
</el-form-item>
</el-col>
<el-col :span='12'>
<el-form-item label='导演' label-width="80px" prop="director">
<el-input v-model="movie.director"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter='15'>
<el-col :span='12'>
<el-form-item label='发片国家' label-width="80px" prop="country">
<el-input v-model="movie.country"></el-input>
</el-form-item>
</el-col>
<el-col :span='12'>
<el-form-item label='上映时间' label-width="80px" prop="showDate">
<el-input v-model="movie.showDate"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter='15'>
<el-col :span='12'>
<el-form-item label='语言' label-width="80px" prop="language">
<el-input v-model="movie.language"></el-input>
</el-form-item>
</el-col>
<el-col :span='12'>
<el-form-item label='时长' label-width="80px" prop="duration">
<el-input v-model="movie.duration"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label='编剧' label-width="80px" prop="writer">
<el-input v-model="movie.writer"></el-input>
</el-form-item>
<el-form-item label='演员' label-width="80px" prop="actor">
<el-input v-model="movie.actor"></el-input>
</el-form-item>
<el-form-item label='观影链接' label-width="80px" prop="url">
<el-input v-model="movie.url"></el-input>
</el-form-item>
<el-form-item label='电影简介' label-width="80px" prop="summary">
<el-input v-model="movie.summary" type='textarea'></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
<el-button @click="resetForm('ruleForm')">重置</el-button>
</el-form-item>
</el-form>
js部分:注意rules对象以及内部的属性和上面代码中的el-form-item的prop属性的对应关系
data(){
return{
rules:{
name:[{required:true,message:'请输入影片名称',trigger:'blur'}],
director:[{required:true,message:'请填写导演名字',trigger:'blur'}],
writer:[{required:true,message:'请填写编剧名字',trigger:'blur'}],
actor:[{required:true,message:'请填写演员名字',trigger:'blur'}],
type:[{required:true,message:'请填影片类型',trigger:'blur'}],
country:[{required:true,message:'请填写出版国家',trigger:'blur'}],
showDate:[{required:true,message:'请填写上映日期',trigger:'blur'}],
language:[{required:true,message:'请填写语言类型',trigger:'blur'}],
duration:[{required:true,message:'请填写影片时长',trigger:'blur'}],
url:[{validator:checkUrl,trigger:'blur'}],
summary:[{required:true,message:'请填写电影简介',trigger:'blur'}]
}
}
}
el-form也可以自定义规则:如下
在vue data() 函数中声明对应的规则,并且添加到对应prop属性中,语法如下:
data(){
var checkUrl =(rule,value,callback)=>{
let ex1 = /^https:\/\//;
let ex2 = /^http:\/\//;
if(!value){
return callback(new Error('链接不能为空'));
}else if(!value.match(ex1)&&!value.match(ex2)){
return callback(new Error('请输入正确格式的地址'));
}else{
return callback();
}
}
return {
rules:{
url:[{validator:checkUrl,trigger:'blur'}]
}
}
}