vue3基于element-plus二次封装表单组件

Vue3中ElementPlus组件二次封装,实现原组件属性、插槽、事件监听、方法的透传 本文以el-input组件为例,其它组件类似用法。 阅读详情

效果图

Form.vue

<template>
  <div>
    <el-form ref="ruleFormRef" :model="formData" :rules="rules" label-width="120px" status-icon>
      <template v-for="(item, index) in formDesc" :key="index">
        <el-form-item :label="item.label" v-if="item.type === 'select'" prop="region">
          <el-select v-model="formData.region" placeholder="please select your zone">
            <el-option
              v-for="(optionItem, optionIndex) in item.option"
              :key="optionIndex"
              :label="optionItem.label"
              :value="optionItem.value"
            />
          </el-select>
        </el-form-item>
        <el-form-item :label="item.label" v-else-if="item.type === 'date'" prop="time">
          <el-date-picker v-model="formData.time" type="date" placeholder="Pick a date" style="width: 100%" />
        </el-form-item>
        <el-form-item :label="item.label" v-else-if="item.type === 'switch'">
          <el-switch v-model="formData.delivery" />
        </el-form-item>
        <el-form-item :label="item.label" v-else-if="item.type === 'checkbox'" prop="type">
          <el-checkbox-group v-model="formData.type">
            <el-checkbox
              v-for="(checkboxItem, checkboxIndex) in item.checkboxList"
              :key="checkboxIndex"
              :label="checkboxItem.label"
              :name="checkboxItem.name"
            />
          </el-checkbox-group>
        </el-form-item>
        <el-form-item :label="item.label" v-else-if="item.type === 'radio'" prop="resource">
          <el-radio-group v-model="formData.resource">
            <el-radio v-for="(radioItem, radioIndex) in item.radioList" :key="radioIndex" :label="radioItem.label" />
          </el-radio-group>
        </el-form-item>
        <el-form-item :label="item.label" v-else prop="name">
          <el-input v-model="formData.name" />
        </el-form-item>
      </template>
      <el-form-item>
        <el-button type="primary" @click="submitForm(ruleFormRef)">Create</el-button>
        <el-button @click="resetForm(ruleFormRef)">Reset</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>
<script setup lang="ts">
import { rules } from './FormData'
import type { FormInstance } from 'element-plus'
interface Props {
  formDesc: any
  formData: Record<string, any>
}
const props = defineProps<Props>()
console.log(props)
const ruleFormRef = ref<FormInstance>()
interface EmitEvent {
  (e: 'submit', params: any): void
}
const emit = defineEmits<EmitEvent>()
const submitForm = async (formEl: FormInstance | undefined) => {
  if (!formEl) return
  await formEl.validate((valid, fields) => {
    if (valid) {
      console.log('submit!')
      console.log(props.formData)
      emit('submit', props.formData)
    } else {
      console.log('error submit!', fields)
    }
  })
}

const resetForm = (formEl: FormInstance | undefined) => {
  if (!formEl) return
  formEl.resetFields()
}
</script>
<style></style>

FormData.ts (表单项及校验规则)

import type { FormRules } from 'element-plus'
export const formDesc = ref([
  // 表单项
  {
    label: '标题',
    prop: 'name',
    type: 'input'
  },
  {
    label: '区域',
    prop: 'region',
    type: 'select',
    option: [
      {
        label: '上海',
        value: 'shanghai'
      },
      {
        label: '北京',
        value: 'beijing'
      }
    ]
  },
  {
    label: '选择时间',
    prop: 'time',
    type: 'date'
  },
  {
    label: '激活',
    prop: 'delivery',
    type: 'switch'
  },
  {
    label: '多选',
    prop: 'type',
    type: 'checkbox',
    checkboxList: [
      {
        label: '唱',
        name: 'APEX'
      },
      {
        label: '跳',
        name: 'APEX'
      },
      {
        label: 'RAR',
        name: 'APEX'
      },
      {
        label: '篮球',
        name: 'APEX'
      }
    ]
  },
  {
    label: '单选',
    prop: 'resource',
    type: 'radio',
    radioList: [
      {
        label: '蔡徐坤'
      },
      {
        label: '周杰伦'
      }
    ]
  }
])

export const rules = reactive<FormRules>({
  // 校验规则
  name: [
    { required: true, message: 'Please input Activity name', trigger: 'blur' },
    { min: 3, max: 5, message: 'Length should be 3 to 5', trigger: 'blur' }
  ],
  region: [
    {
      required: true,
      message: 'Please select Activity zone',
      trigger: 'change'
    }
  ],
  time: [
    {
      type: 'date',
      required: true,
      message: 'Please pick a date',
      trigger: 'change'
    }
  ],
  type: [
    {
      type: 'array',
      required: true,
      message: 'Please select at least one activity type',
      trigger: 'change'
    }
  ],
  resource: [
    {
      required: true,
      message: 'Please select activity resource',
      trigger: 'change'
    }
  ]
})

 父组件调用Form组件

<template>
  <el-dialog v-model="dialogVisible" title="Tips" width="50%" :before-close="cancel">
    <div>
      <Form :formData="formData" :formDesc="formDesc" @submit="handleBaseSubmit" />
    </div>
  </el-dialog>
</template>

<script lang="ts" setup>
import Form from '../commonForm/Form.vue'
import { formDesc } from '../commonForm/FormData'
const formData = reactive<Record<string, any>>({
  name: '',
  region: '',
  time: '',
  delivery: false,
  type: [],
  resource: '',
  desc: ''
})
const handleBaseSubmit = (model: Record<string, any>) => {
  console.log(model) // 获取表单数据
}
</script>
<style scoped>
</style>

基于 Vue3 + Element-plus 表单 Form 组件二次封装 这篇文章介绍了一个名为vue3-xmw-form的项目,提供了使用方法、Form属性、Form方法、Column配置、xType表单类型以及存在的问题等信息。其中包括了项目的预览地址和Github链接。文章还讲解了如何在页面上使用该组件以及调用方式,以及列举了Column配置参数的说明。最后,作者提到了一些目前存在的问题,例如无法支持所有xType的所有方法、无法正确回显和数据绑定Tree组件等,并表示该项目目前不再维护。 阅读详情

相关推荐

Vue3+ElementPlus二次封装实战:如何让el-input组件完美继承所有原生功能?

本文深入探讨了在Vue3项目中如何对ElementPlus的el-input组件进行二次封装,以实现对原生属性、插槽、事件和方法的完美继承。通过分析Vue3的组件通信机制,并结合defineModel、属性透传、动态插槽处理及方法暴露等核心技术,指导开发者构建出既保留全部原生功能,又可灵活扩展的企业级可复用表单组件。

yhn4567890的博客 1109

vue3+ts+element-plus el-table组件二次封装(2024-09-25 TTable组件新增虚拟滚动功能)

vue3+ts+element-plus 2024-04-24 TTable组件多级表头支持单元格编辑功能;新增了单元格编辑功能))新增了单元格编辑键盘事件及第三方组件事件功能;2023-06-08 TTable组件新增整行拖拽排序功能;TTable组件修复表头合并插槽使用失效;TTable组件单元格编辑新增表单校验功能/表格内操作按钮权限配置)新增展开行功能;2024-03-20 TTable组件新增新增第一列既显示(复选、单选)和序列号;TTable组件新增虚拟滚动功能)

wocwin的博客 1万+

Element Plus 组件库内部实现原理揭秘:v-model 封装和 Input 组件核心实现

在 Element Plus 组件库中,v-model 是一个常用的实现双向数据绑定的语法糖,而 Input 组件是其中一个核心的组件之一。本文将揭示 Element Plus 组件库中 v-model 的封装实现原理以及 Input 组件的核心实现,同时提供相应的 JavaScript 源代码。综上所述,Element Plus 组件库中的 v-model 封装实现原理和 Input 组件的核心实现,通过监听输入事件和自定义事件的方式,实现了双向数据绑定的功能。属性的值传递给了 Input 组件的。

EuForth的博客 523

vue3 ts element plus form表单二次封装详细步骤 (附参数、类型详细介绍及简单使用示例)

上篇table 表格封装 讲到项目中经常会用到 table 表格,所以做了封装。当然,form 表单使用的频率依然很高,所以和封装 table 表格的思路相似,对 form 表单也做了一个二次封装的组件。 Form 表单组件封装 2. 基本表单使用 3. 自定义 key 4. 自定义表单验证 表单配置项, 参数请参考下面参数介绍 参数类型声明(声明为全局的类型,方便使用) 参数介绍 Form 属性 参数 说明 类型 是否必填 默认值 model 表单数据对象 Record...

前台端水师的博客 1万+

vue3 element-plus el-form的二次封装

form表单的二次封装vue3 element-plus el-form的二次封装。

dreamimport的博客 1971

Vscode+ROS/ROS2 开发调试基于ROS/ROS2应用环境配置

在ROS操作系统开发应用程序时,我们常常需要调试代码,验证程序的正确性。但是在用rosrun或者roslaunch启动节点后,若程序运行过程中发生错误而导致发生出错停止工作,这时候终端并不会输出具体的信息指出在何处发生了错误,具体错误的原因又是什么。往往仅仅是core dump 或者segmentation fault 等等一类的模糊提示。

Chasinglight的博客 5801

vue3+element-plus el-form表单组件二次封装(vue3+ts项目)TForm组件新增继承 Element-plus 组件的事件使用及el-input 去除前后空格

vue3+element-plus el-form表单组件二次封装(vue3+ts项目) TForm组件新增了isHideItem属性动态显示隐藏某些项;TForm组件新增继承 Element-plus 组件的事件使用及el-input 去除前后空格(type=password 除外)

wocwin的博客 4848

pytorch-cifar100学习资料汇总 - 基于PyTorch的CIFAR-100图像分类实践

pytorch-cifar100是一个基于PyTorch实现CIFAR-100数据集图像分类的开源项目。该项目实现了多种经典的深度学习网络模型,如ResNet、DenseNet、VGG等,为开发者提供了在CIFAR-100数据集上进行图像分类实验的代码范例。pytorch-cifar100项目为我们提供了在CIFAR-100数据集上进行图像分类实验的完整代码实现。无论你是想要学习PyTorch的使用,还是研究不同网络模型在CIFAR-100上的表现,这个项目都是一个很好的起点。

helloaiworld的博客 1125

Vue3+ts+element-plus 组件的二次封装-- el-table的封装,通过json进行配置表单,可用插槽进行拓展

Vue3+ts+element-plus 组件的二次封装-- el-table的二次封装,附带思路讲解以及源码。el-table的封装,通过json进行配置表单,可用插槽进行拓展。

Penk的博客 2550

高频功率放大器的设计实现

摘 要 随着无线通信技术的高速发展,市场对射频电路的需求越来越大,同时对射频电路的性能要求也越来越高。高频功率放大器是位于无线发射级末端的重要部件,为了弥补信号在无线传输过程中的衰耗,要求发射机具有较大功率的输出,通信距离越远,要求的输出功率越大。在高频范围内,为了获得足够大的高频输出功率,就要采用高频功率放大器。 本次课程设计的高频功率放大器的技术指标包括输出功率、效率、功率增益、由于高频频功率放大器的输出功率比较大,耗能比较多,所以工作效率就显得比较重要。本课程设计的高频功率放大器电路由两极功率放大器

qq_43543515的博客 3万+

Geneformer实战指南:基于Hugging Face Transformers的基因序列分类模型解析

本文详细解析了基于Hugging Face Transformers的Geneformer模型在基因序列分类任务中的应用。通过介绍模型架构、数据处理流程和实战案例,帮助生物信息学研究者掌握这一前沿技术,实现高效的基因表达数据分析与分类。

weixin_28224217的博客 583

Vue3+ts+element-plus 组件的二次封装-- 新增修改Form弹框的二次封装,通过JSON进行配置Form表单,实现高内聚低耦合

环境状态vue版本:vue3是否使用 ts:是后台管理系统的网站,一个页面无非就是4个常用业务块头部的搜索栏table表格页脚新增编辑弹框那咋们是不是可以将其进行封装成组件呢?只需要传入一个配置文件就可以了~项目解构如下:封装后的展示图如下:如果能做成这样,是不是页面就会整洁很多?这边虽说是Form弹框,但是还是用到了elementUI的两个组件:1个是el-dialog,1个是el-form。通过JSON进行配置Form表单,实现高内聚低耦合

Penk的博客 2357

12、认知地图的建模与学习

本博客系统介绍了认知地图的定义、背景及其在机器智能领域的应用,重点探讨了模糊认知地图(FCMs)的建模方法与优势。文章还对比分析了几种主流的认知地图模型(如Axelrod模型、Kosko模型等),并讨论了模型的稳定性条件及实际应用前景。通过智能制造和医疗诊断的具体案例,展示了认知地图在复杂因果推理中的强大能力,并提出了模型优化方向与未来研究展望。

plant的博客 210

基于vue3 element-plus form表单二次封装

基于element-plus form表单二次封装之前发布过一篇基于element form表单的二次封装 之前发布过一篇基于element form表单的二次封装 具体使用请查看链接: element-ui form表单,table二次封装 由于element-plus 已发布多时,现在基于vue3 以及element-puls做了封装form表单 ...

轮回千载 2844

【SAP ME 3】JAVA 调用SAP PO WebService

Java调用SAP PO/PI WebService接口

探索 Java 编程的技巧、最佳实践和解决方案。本博客提供针对 Java 开发者的实用指南,涵盖从基础到高级话题,旨在提升编程效率和技能。 847

英伟达 Jetson AGX Thor 官方入门教程(二)CUDA、Docker、JetPack 设置

本文详细介绍了NVIDIA Jetson AGX Thor开发套件的安装与配置流程。主要内容包括:1) BSP安装的三种方法(Jetson ISO、SDK Manager和Linux刷写脚本)及其适用场景;2) Docker环境的完整配置步骤及测试方法;3) CUDA工具包的两种安装方式(容器化和原生安装)及其性能对比;4) JetPack SDK的安装选项。文章提供了详细的命令行操作指南和故障排除建议,帮助开发者快速搭建AI开发环境,充分发挥Jetson平台的硬件性能优势。

机器人控制与仿真应用 1737

代码优化——基于element-plus封装组件:表单封装

实现一个基于element-plus表单组件的二次封装

weixin_74457498的博客 1100

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

vue3二次封装element-puls

如: label 的提示信息 , type 的类型。页面就会出现两个一样的输入框,并且里面的渲染不同。placeholder:"请输入用户ID"placeholder:"请输入用户ID"placeholder:"请输入用户名称"如果定义// 定义表单的配置项。将表单的通用信息给设置出来。label:"用户ID",label:"用户ID",label:"用户名称",// 定义表单的配置项。

Wx001214的博客 627

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

vue3基于element-plus的组件二次封装数据双向绑定

vue3数据双向绑定,element-plus的二次封装

pizixian_的博客 4637

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

二次封装el-form--只需配置文件

兄弟们经过我上班摸鱼,最近摸了很多组件,一点点分享给大家。大佬们就别看了,二次封装很简单哦。我是根据element+封装的。大家在封装时,根据文档的api一步步实现。我给大家说说简单的思路。根据上面代码,大家来找相同的部分,然后通过配置的形式传入即可,是不是很简单。下面给大家分享我的配置文件。这个配置文件,组件不需要动,除非有情况没有考虑,或者代码不严谨。大家可以根据情况书写自己的组件。其中也有table封装,包括搜索栏一键生成0。然后看看组件内部写法。

m0_53273062的博客 1266

vue-element-plus-admin组件库实战教程:30+二次封装组件深度应用

想要快速构建专业级后台管理系统吗?vue-element-plus-admin为你提供了完整的解决方案!这是一个基于Vue3、TypeScript、Element Plus和Vite4的现代化后台集成方案,包含了30多个精心二次封装的组件,能够显著提升你的开发效率。无论你是Vue3初学者还是经验丰富的开发者,这个项目都能帮助你快速搭建功能完善的企业级后台管理系统。✨ ## 🚀 为什么选择vue

gitblog_00354的博客 644

easy-elplus == Element Plus二次封装(Table,Dialog:....)

是基于的二次封装组件库。它在完全保留 Element Plus 组件能力的基础上,对常用组件进行了功能增强和 API 简化。通过内置的通用逻辑处理,开发者可以用更少的代码实现更丰富的功能。

每天都要努力学习哦~~ 751

【限时免费】 Avue.js 技术文档

Avue.js 技术文档 【免费下载链接】avue ????Avue.js是基于现有的element-plus库进行的二次封装,简化一些繁琐的操作,核心理念为数据驱动视图,主要的组件库针对table表格和form表单场景,同时衍生出更多企业常用的组件,达到高复用,容易维护和扩展的框架,同时内置了丰富了数据展示组件,让开发变得更...

gitblog_01403的博客 273

Element plus 下拉框组件选中一个选项后显示的是 value 而不是 label

这样写,选中一个选项 “是” 后,下拉框中显示的是 label---是,而不是 value---1,如图。

qq_30193097的博客 1002

如何快速搭建企业级后台管理系统:Vue-Element-Plus-Admin 终极实战指南

Vue-Element-Plus-Admin 是一个基于 Vue3、TypeScript、Element-Plus 和 Vite 的企业级后台管理系统解决方案,它提供了丰富的组件库和完整的权限管理系统,帮助开发者快速构建专业的后台应用。本文将详细介绍如何从零开始使用这个强大的框架,让你在最短时间内搭建起功能完善的企业级后台系统。 ## 🚀 为什么选择 Vue-Element-Plus-Admi

gitblog_00054的博客 685
上一篇: 前端实现网页整体置灰
下一篇: vue3 + ts 使用el-dialog
Lxg-JJJJ
博客等级 码龄7年 960粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值