vue如何封装一个高质量的表单通用组件 您所在的位置:网站首页 vue如何封装组件 vue如何封装一个高质量的表单通用组件

vue如何封装一个高质量的表单通用组件

2023-03-11 02:50| 来源: 网络整理| 查看: 265

vue如何封装一个高质量的表单通用组件 发布时间:2023-03-10 13:49:51 来源:亿速云 阅读:50 作者:iii 栏目:开发技术

这篇“vue如何封装一个高质量的表单通用组件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue如何封装一个高质量的表单通用组件”文章吧。

基于Element-plus实现二次封装表单组件

特性复用:必须继承原有组件的所有特性。

命名规范:二次组件名必须见名知意,我们一般都是起一个公用名+原有组件名,比如lib-form。

接口简单:自定义暴露出来的接口越简单越好。

容易拓展:留有自定义插槽,让用户可以自己选择。

功能完善:具备更完善的功能如:表单验证、动态删减表单,集成第三方的插件(富文本)...

场景通用:具备多个场景使用,比如弹框嵌套表单、页面嵌套表单。

封装一个高质量的通用组件,上面是真的只是基操,话不多说,直接上实践手把手教你封装组件。

步骤1

继承原有组件的所有特性(这也是封装的核心)。先明确三个大方向:

表单固定属性,继承Form表单的所有属性、方法。

 // 定义el-form的ref继承原有组件的form属性  export interface FormInstance {   registerLabelWidth(width: number, oldWidth: number): void,   deregisterLabelWidth(width: number): void,   autoLabelWidth: string | undefined,   emit: (evt: string, ...args: any[]) => void,   labelSuffix: string,   inline?: boolean,   model?: Record,   size?: string,   showMessage?: boolean,   labelPosition?: string,   labelWidth?: string,   rules?: Record,   statusIcon?: boolean,   hideRequiredAsterisk?: boolean,   disabled?: boolean,   validate: (callback?: Callback) => Promise,   resetFields: () => void,   clearValidate: (props?: string | string[]) => void,   validateField: (props: string | string[], cb: ValidateFieldCallback) => void, }

表单项固定属性,继承表单项的所有属性、方法。

// 表单每一项的配置选项 export interface FormOptions {   // 表单项显示的元素   type: '',// 定义表单项类型   value?: any, // 表单项的值   label?: string,// 表单项label   prop?: string,// 表单项的标识   rules?: RuleItem[],// 表单项的验证规则   placeholder?: string,// 表单项的占位符   attrs?: {  // 按需定义不同表单类型属性     ...   },   children?: FormOptions[],// 表单项的子元素,可能存在嵌套表单组件,如select   ....// 适当扩展我们需要的属性,比如上传组件属性,行布局表单属性 }

由于Element-plus组件都是以el-为前缀,所以type取值只需要取el-后面部分作为值就行,比如el-input取 'input' 为值。

vue如何封装一个高质量的表单通用组件

表单验证效果,继承组件原有的所有验证属性。由于Element-plus的验证都是使用 async-validator 这个插件的验证方法,直接复用插件源码路径async-validator/src/interface.ts文件下的所有代码:

// 核心代码:封装验证方式时的属性 export interface RuleItem {   type?: RuleType; // 验证种类   required?: boolean;// 是否必填   pattern?: RegExp | string;// 验证方式匹配   min?: number; // 表单项最小值   max?: number; // 表单项最大值   len?: number; // 表单项字符长度   trigger?: string | string[];// 验证触发方式   .... }步骤2

实现一个完善的通用组件封装,通过对标签封装、接口 暴露、开发者传参等。明确表单类型,根据不同类型表单复用多种场景,不仅开发者用户拓展,而且,让开发者用最少代码就可以复用:

       ...    

普通表单项封装,比如日期、输入等组件。

                       

嵌套表单项封装,比如下拉框,除了select组件还嵌套option组件。

                                          富文本表单项封装

本文使用的是wangEditor。

import E from 'wangeditor'; // 遍历传入的prop的options对象,初始化富文本 if (item.type === 'editor') { // 初始化富文本 nextTick(() => {   if (document.getElementById('editor')) {     const editor = new E('#editor');     editor.config.placeholder = item.placeholder!;     editor.create();     // 初始化富文本的内容     editor.txt.html(item.value);     editor.config.onchange = (newHtml: string) => {       model.value[item.prop!] = newHtml;     };     edit.value = editor;   } }); }上传表单项封装

向开发者暴露上传的核心方法:预览、删除、上传成功等,同时允许开发者自定义上传信息以及渲染区域等。

                   同行多个表单布局封装

有时业务需要,一行可以定义多个表单,所以需要使用el-row,此时需要修改FormOptions属性接口,完善多个表单场景,cols是一个数组定义FormOptions数组,colOption是el-col组件的相关属性,然后重新复用嵌套表单的代码。

                                                                                   

自定义插槽:开发者可以根据需要,在封装的el-form中添加插槽,可以允许组件功能的拓展,我们可以根据自己需要进行封装,这里就不一一演示了。

提交取消按钮区域:这个最好可以实现插槽让开发者可以自定义。

       步骤3

开发者的调用封装组件,通过配置不同表单类型的数组,然后调用lib-form封装组件实现业务代码复用。

组件的调用:根据业务需要,可以适当定义我们需要的组件属性以及必须要传的参数。

       Click to upload                  jpg/png files with a size less than 500kb                提交     重置   

表单项的配置数组:由于这配置数组比较长,所以一般可以单独抽离出来,不要写在vue文件中,这样可以提高代码的可读性。

// 这里以多行表单布局为例子 let options: FormOptions[] = [   {     type: 'row',     rowGutter: 20,     cols: [       {         type: 'input',         value: '',         label: '用户名',         prop: 'username',         placeholder: '请输入用户名',         rules: [           {             required: true,             message: '用户名不能为空',             trigger: 'blur',           },           {             min: 2,             max: 6,             message: '用户名在2-6位之间',             trigger: 'blur',           },         ],         attrs: {           clearable: true,         },         colOption: {           offset: 0,           span: 12,         },       },       {         type: 'input',         value: '',         label: '用户名',         prop: 'username',         placeholder: '请输入用户名',         rules: [           {             required: true,             message: '用户名不能为空',             trigger: 'blur',           },           {             min: 2,             max: 6,             message: '用户名在2-6位之间',             trigger: 'blur',           },         ],         attrs: {           clearable: true,         },         colOption: {           offset: 0,           span: 12,         },       },     ],   },  ]

以上就是关于“vue如何封装一个高质量的表单通用组件”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

推荐阅读: 如何在vue项目中利用AJAX获取数据 vue.js怎么加载本地json文件

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vue 上一篇新闻:C++11、C++14、C++17、C++20常用新特性有哪些 下一篇新闻:电脑格式化数据分区指的是什么 猜你喜欢 PHP怎么实现获取MySQL数据库的记录数据 springboot怎么通过不同的策略动态调用不同的实现类 C#怎么绘制实时曲线图 怎么实现DataGridView控件的数据绑定 PHP怎么实现将Word文件保存到SQL Server数据库 怎么用DataTable的AcceptChanges()和RejectChanges()方法实现DataGridView数据增、删、改 springboot多个service互相调用的事务处理方法 Java怎么实现在线寄查快递系统 C#如何获取DataTable对象状态DataRowState springboot的相互依赖报错问题怎么解决


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有