Home > Article > Web Front-end > How Vue+ElementUI handles oversized forms
This article will take you through how Vue ElementUI handles very large forms. I hope it will be helpful to you!
Due to recent business adjustments in the company, the logic of the previous long form has changed a lot, so I plan to reconstruct it (it was written by a background manager who has resigned. , and there are no comments. One component has 4000 lines written, which is really powerless). For your convenience, I have split the project into 14 components
and simplified them.
validate# provided by
el-form when saving ##Method for verification (
Loop to verify each split component)
vue.js Tutorial"]
StartFor example:
form1,
form2 (for the convenience of readers, do not use names)
tied together? The determined ones are all
form will be explained later (for the convenience of later maintenance)
// form1 组件 <template> <el-form ref="form" :model="form" label-width="10px" > <el-form-item label="姓名" prop="name"> <el-input v-model="form.name" /> </el-form-item> </el-form> </template> <script> export default { name: 'Form1', props: { form: {} }, data() { return { rules: { name: [ { required: true, message: '请输入姓名', trigger: 'blur' } ] } } }, methods: { // 这里是是为了父组件循环调用校验 validForm() { let result = false this.$refs.form.validate(valid => valid && (result = true)) return result } // 我这里还用了另一种方式写的,但是循环校验的时候是promise对象,有问题,望大佬们指点一二 validForm() { // 明明这里输出的结构是 Boolean 值,但在父组件循环调用之后就是promise类型,需要转换一下才行 return this.$refs.form.validate().catch(e => console.log(e)) } } } </script> // form2 组件 <template> <el-form ref="form" :model="form" label-width="10px" > <el-form-item label="年龄" prop="age"> <el-input v-model="form.age" /> </el-form-item> </el-form> </template> <script> export default { name: 'Form2', props: { form: {} }, data() { return { rules: { name: [ { required: true, message: '请输入年龄', trigger: 'blur' } ] } } }, methods: { // 这里是是为了父组件循环调用校验 validForm() { let result = false this.$refs.form.validate(valid => valid && (result = true)) return result } } } </script>
// 父组件 <template> <div class="parent"> <form1 ref="form1" :form="formData.form1" /> <form2 ref="form2" :form="formData.form2" /> <el-button type="primary" @click="save">报错</el-button> </div> </template> <script> ... 省略引用 export default { name: 'parent', ... 省略注册 data () { return { formData: { form1: {}, form2: {} } } }, } </script>
and
form2 in
formData are used on the
ref of the subform component respectively, they can be Find them in turn during traversal and modify the save function. The code is as follows:
methods: { save () { // 每个表单对象的 key 值,也就是每个表单的 ref 值 const formKeys = Object.keys(this.formData) // 执行每个表单的校验方法 const valids = formKeys.map(item => this.$refs[item].validForm()) // 所有表单通过检验之后的逻辑 if (valids.every(item => item)) { console.log(11) } } }Answer why the two components
are bound to
form
has common
props methods
export default { props: { form: { required: true, type: Object, default: () => {} }, }, methods: { validForm () { let result = false this.$refs.form.validate(valid => valid && (result = true)) return result } } }
in
form1 form2 and delete the corresponding properties and methods in the corresponding component
Introduction to Programming! !
The above is the detailed content of How Vue+ElementUI handles oversized forms. For more information, please follow other related articles on the PHP Chinese website!