最近在用 vue3 封装 element 的表单时遇到的一个小问题,这里就简单记录一下过程。话不多说直接上代码!!! 正文 部分核心代码 import { ref, defineComponent, renderSlot, type PropType, type SetupContext } from 'vue'; import { ElForm, ElFormItem, ElRow, ElCol } from 'element-plus'; import type...
这在实际开发中是非常常见的,因此对el-form进行动态长度的封装是非常有必要的。 在Vue3中,我们可以使用响应式数据和计算属性来实现动态长度的封装。具体操作如下: 首先,我们可以通过响应式数据来动态生成表单的输入项和校验规则。例如,我们可以将表单的输入项和校验规则存储在一个数组中,然后通过v-for指令动态渲染...
封装的表单组件</h1> </template> <!-- 操作按钮 --> <template v-slot:Actions> <div style="text-align: center"> <el-button type="primary" @click="onSubmit(baseForm)" >提交</el-button > <el-button @click="handlerReset">重置</el-button> </div> </template> </vue3-xmw-form> ...
vue3 封装el-form循环判断太多卡顿在Vue3中,如果你在el-form中进行了大量的循环判断,可能会导致页面卡顿。这是因为每次循环判断都会触发Vue的响应式更新,如果循环次数过多,会导致性能问题。 为了解决这个问题,你可以采取以下几种策略: 1.使用计算属性或方法:将循环判断的逻辑提取到一个计算属性或方法中,只在需要时...
form组件 <template> <el-form :model="ruleForm" :rules="rules" ref="ruleFormRef" label-width="150px"> <el-row> <el-col v-for="(item, index) in fromTypeList" :key="index" :span="item.span"> <el-form-item :label="item.label" :prop="item.isRequire ? item.valueKey : null"...
二次封装el-form,理由无非就是多个地方用同一个表单,懒得重复写校验。 表单组件 <template><el-formref="FormRef":model="formData":rules="rules"><el-form-itemlabel="名称"prop="name"><el-inputv-model.trim="formData.name"/></el-form-item><el-form-itemlabel="地址"prop="address"><el-input...
这个表单控件是基于 **element-plus** 的 el-form 做的二次封装,所以首先感谢 element-plus 提供了这么强大的UI库,以前用 jQuery 做过类似的,但是非常麻烦,既不好看,可维护性、扩展性也差,好多想法都实现不了(技术有限)。 现在好了,站在巨人的肩膀上,实现自己的想法了。
代码块 1 为二次封装的组件。核心思路就是根据 formItem 中的 type 字段,渲染不同类型的表单组件。 // 仅展示有问题的核心逻辑 <template> <el-form class="table-search-form" :model="props.model" :rules="props.rules"> <el-row :gutter="32"> <el-col v-for="(formItem, index) in props.fo...
开发后台管理系统,在业务上接触的最多就是表单(输入)和表格(输出)了。对于使用 Vue 框架进行开发的同学来说,组件库 Element 是肯定会接触的,而其中的 el-table 和 el-form 更是管理系统中的常客。 然而,一旦项目的表格或表单多起来,每个不同的配置,以及多一个字段少一个字段,都要在 template 中重新写一大段...
import { ElFormItem, ElInput, ElDialog } from 'element-plus' const props = defineProps({ dialogVisible: { type: Boolean, default: () => false }, }) var dialogVisibleOn = ref() var form = reactive({ ticketIndex: "" }) watch( ...