vue二次封装el-from表单,实现一个demo
时间: 2024-03-06 22:47:47 浏览: 96
vue 结合ES 使用demo
好的,这里是一个简单的示例,二次封装了 `el-form` 组件,实现了表单验证和表单重置的功能:
```vue
<template>
<my-form :form-data="formData" :form-rules="formRules" @submit="handleSubmit" @reset="handleReset" />
</template>
<script>
import MyForm from '@/components/MyForm'
export default {
components: {
MyForm
},
data() {
return {
formData: {
username: '',
password: ''
},
formRules: {
username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
password: [{ required: true, message: '请输入密码', trigger: 'blur' }]
}
}
},
methods: {
handleSubmit(formData) {
// 表单提交处理逻辑
console.log(formData)
},
handleReset() {
// 表单重置处理逻辑
console.log('表单已重置')
}
}
}
</script>
```
`MyForm` 组件的代码如下:
```vue
<template>
<el-form :model="formData" :rules="formRules" ref="form" label-width="100px">
<slot></slot>
<el-form-item>
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button @click="resetForm">重置</el-button>
</el-form-item>
</el-form>
</template>
<script>
export default {
props: {
formData: Object,
formRules: Object
},
methods: {
submitForm() {
this.$refs.form.validate(valid => {
if (valid) {
// 表单验证通过,提交表单数据
this.$emit('submit', this.formData)
} else {
// 表单验证失败
console.log('表单验证失败')
return false
}
})
},
resetForm() {
this.$refs.form.resetFields()
this.$emit('reset')
}
}
}
</script>
```
在 `MyForm` 组件中,使用 `slot` 插槽来实现动态插入表单项,使用 `props` 属性来接收父组件传递的表单数据和表单验证规则,使用 `$emit` 方法来向父组件发送表单提交和表单重置的事件。
阅读全文