vue elementui 实现搜索栏公共组件封装的实例代码

2020-06-16 06:36:29易采站长站整理

5、参数配置项解释

(1)示例:


[{
label: '用户名', // label文字
prop: 'username', // 字段名
element: 'el-input', // 指定elementui组件
initValue: '阿黄', // 字段初始值
placeholder: '请输入用户名', // elementui组件属性
rules: [{ required: true, message: '必填项', trigger: 'blur' }], // elementui组件属性
events: { // elementui组件方法
input (val) {
console.log(val)
},
}
}]

label 用于绑定给el-form-item上的label,表单项标题
prop 用于绑定给el-form-item上的prop,字段名,必填
element 指定elementui表单项的组件名,必填
initValue 表单项的初始值,可选
events 对象,对象里加方法,js原生方法或者elementui表单项组件支持的方法都可以加进去,通过v-on遍历绑定
… 其他elementui表单项组件支持的属性或者html原生属性都可以添加,常用的例如rules表单校验、placeholder提示,通过v-bind遍历绑定

(2)参数传递解析的流程:

首先,searchForm.vue组件里通过props接收参数:


formOptions: {
type: Array,
required: true,
default () {
return [] }
},

created组件里处理初始值:


// 添加初始值
addInitValue () {
const obj = {}
this.formOptions.forEach(v => {
if (v.initValue !== undefined) {
obj[v.prop] = v.initValue
}
})
this.formData = obj
}

一部分配置项绑定在el-form-item上,一部分传递给formItem表单项组件再绑定:


<el-form-item
v-for="(item, index) in formOptions"
:key="newKeys[index]"
:prop="item.prop"
:label="item.label ? (item.label + ':') : ''"
:rules="item.rules"
>
<formItem
v-model="formData[item.prop]"
:itemOptions="item"
/>
</el-form-item>

formItem.vue表单项组件里props接受传参:


itemOptions: {
type: Object,
default () {
return {}
}
}

computed里处理接收的参数itemOptions,生成要绑定的所有属性对象bindProps:


// 绑定属性
bindProps () {
let obj = { ...this.itemOptions }
// 移除已使用的或不相关的冗余属性
delete obj.label
delete obj.prop
delete obj.element
delete obj.initValue
delete obj.rules
delete obj.events
if (obj.element === 'el-select') {
delete obj.options
}
return obj
},

computed里生成要绑定的所有方法对象bindEvents: