【VForm3】扩展自定义表单组件

这篇具有很好参考价值的文章主要介绍了【VForm3】扩展自定义表单组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、基于Element Plus自定义扩展字段(以 Steps 步骤条为例)

以下步骤均在 extension 文件夹中进行,新增完成后,Steps控件在 自定义扩展字段 中出现。

1. 定义组件

  1. 配置属性扩展,extension-schema.js中,根据组件属性进行配置

    属性说明:
    type: 字段组件的类型名称,必须唯一,不能跟已有组件重复;且必须是新建组件的名称,例如组件名为steps-widget.vue,type必须为steps。i18通过type显示容器名称。需要在lang的en-US_extension.js和zh-CN_extension.js的widgetLabel中配置type对应的名称。
    category: 容器类型,container容器组件,其他为字段组件。
    icon: 容器中显示的图标,可通过iconfont.css进行下载引入展示,也可以直接下载svg图标至 icons/svg 文件夹。
    formItemFlag: 是否嵌套el-form-item组件内,默认false。
    options: 为组件属性,配置属性后可在组件类中通过field.options.xxxx进行绑定

    示例:
    // extension/sample/extension-schema.js
    (1) 配置属性扩展
    export const stepsSchema = {
    	type: 'steps',
    	icon: 'steps',
    	formItemFlag: true,
    	options: {
    		name: '',
    		space: '',
    		direction: 'horizontal',
    		acive: 0,
    		alignCenter: false,
    		simple: false,
    		optionsItem: [
      			{ label: 'Step 1', value: 1},
      			{ label: 'Step 2', value: 2},
      			{ label: 'Step 3', value: 3},
    		]
    	}
    }
    
    (2)引入图标,下载svg图标至icons/svg文件夹中,名称同stepsSchema.icon一致。
    
    (3) 配置国际化语言
    // zh-CN.js
    designer: {
    	...
    	steps: '步骤条',
    }
    
    // en-US.js
    designer: {
    	...
    	steps: 'Steps'
    }
    
    // zh-CN_extension.js
    setting: {
    	...
    	stepSpace: '间距',
      	stepDirection: '显示方向',
      	stepActive: '当前激活步骤',
      	stepAlignCenter: '是否进行居中对齐',
      	stepSimple: '是否应用简洁风格'
    }
    // en_US_extension.js
    setting: {
    	...
    	stepSpace: 'Space',
      	stepDirection: 'Direction',
      	stepActive: 'Active',
      	stepAlignCenter: 'Align Center',
      	stepSimple: 'Simple'
    }
    
  2. 编写组件的SFC文件

    • 字段组件: 字段组件在设计期和运行期共用,故只需要编写一个SFC文件即可(参照alert-widget书写字段组件代码)。

      samples 文件夹中新建组件,命名规则需严格遵守:组件名称-widget,因为之后的拖拽加载是通过component的:is=“{{type}}-widget”。
      vform3,javascript,vue.js,前端

    • 容器组件: 容器组件有两种状态——设计期和运行期,故需要注册两个组件(参照card文件夹书写容器组件代码)。

      samples 文件夹中新建组件,设计期的容器组件需严格遵守命名规则:组件名称-widget;运行期的容器组件则没有要求。
      vform3,javascript,vue.js,前端

    示例:
    // 以字段组件 Steps 为例
    // steps-widget.vue
    	<template>
    		<static-content-wrapper :designer="designer" :field="field" :design-state="designState"
                          :parent-widget="parentWidget" :parent-list="parentList" :index-of-parent-list="indexOfParentList"
                          :sub-form-row-index="subFormRowIndex" :sub-form-col-index="subFormColIndex" :sub-form-row-id="subFormRowId">
    			<el-steps :active="field.options.active" :align-center="field.options.alignCenter" :space="field.options.space" :direction="field.options.direction" :simple="field.options.simple">
        			<el-step v-for="item in field.options.optionsItem" :key="item.value" :title="item.label" />
    			</el-steps>
    		</static-content-wrapper>
    	</template>
    

2. 引入组件,并加载属性编译器extension-loader.js

  1. 加载字段组件步骤
    1)引入组件属性扩展
    import {stepsSchema} from "@/extension/samples/extension-schema"
    
    2)引入组件
    import stepsWidget from '@/extension/samples/steps/steps-widget'
    
    3)引入SFC配置(在‘6’中说明SFC代码配置)
    import {StepsTemplateGenerator} from '@/extension/samples/extension-sfc-generator'
    
    4)加载属性扩展
    addCustomWidgetSchema(stepsSchema)  //加载组件Json Schema
    
    5)注册组件
    app.component(stepsWidget.name, stepsWidget)
    
    6)注册主页面右侧属性配置器
    let directionOptions = [
    	{label: 'horizontal', value: 'horizontal'},
    	{label: 'vertical', value: 'vertical'},
    ]
    PERegister.registerCPEditor(app, 'steps-direction', 'steps-direction-editor',
    	PEFactory.createSelectEditor('direction', 'extension.setting.stepDirection',
    	{optionItems: directionOptions}))
    	
    PERegister.registerCPEditor(app, 'steps-space', 'steps-space-editor',
    	PEFactory.createInputTextEditor('space', 'extension.setting.stepSpace'))
    
    PERegister.registerCPEditor(app, 'steps-active', 'steps-active-editor',
    	PEFactory.createInputNumberEditor('active', 'extension.setting.stepActive'))
    
    PERegister.registerCPEditor(app, 'steps-alignCenter', 'steps-alignCenter-editor',
    	PEFactory.createBooleanEditor('alignCenter', 'extension.setting.stepAlignCenter'))
    
    PERegister.registerCPEditor(app, 'steps-simple', 'steps-simple-editor',
    	PEFactory.createBooleanEditor('simple', 'extension.setting.stepSimple'))
    
    7)注册SFC代码生成器
    registerFWGenerator('steps', stepsTemplateGenerator)
    
示例

vform3,javascript,vue.js,前端

  1. 加载容器组件步骤

3. 编辑SFC代码生成器

// extension-sfc-generator.js
export const stepsTemplateGenerator = (fw, formConfig) => {
  const wop = fw.options
  const attrArr = Object.keys(wop).filter(item => !['name', 'optionsItem'].includes(item));
  let attrStr = attrArr.reduce(function(prev, cur, index, arr) {
    let str =  ` :${cur}="${wop[cur]}"`
    return prev + str;
  })

  const stepOptions = buildStepChildren(fw, formConfig)


  return `<el-steps ${attrStr}>${stepOptions}</el-steps>`
}

const buildStepChildren = (fw, formConfig) => {
  let wop = fw.options
  return `<el-step v-for="(item, index) in ${wop.name}Options" :key="index" :title="item.label" />`
}
示例

vform3,javascript,vue.js,前端文章来源地址https://www.toymoban.com/news/detail-766605.html

二、基于其他框架自定义扩展字段(vant篇)

三、自定义开发字段

到了这里,关于【VForm3】扩展自定义表单组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ant.design(简称antd)中Form表单组件提交表单、表单数据效验、表单自定义效验、表单布局集合

            ant.design(简称antd)现在我们使用较为广泛,web端中后台表单使用非常广泛,此遍文章集合了表单日常用法及使用注意事项。         下图是UI目标样式图                           1、以下是一个组件,首先引入ant相关依赖,在引入react相关依赖,主要使用了For

    2024年02月13日
    浏览(40)
  • 微信小程序之自定义表单组件(radio)

    背景: 最近在做项目的时候遇到一个问题,那就是微信的官方表单组件的可扩展性不强,无法达到设计稿所要求的效果,所以想到了用自定义组件的方法自定义一个表单组件。 (自定义组件其实往往用在需要复用的地方,比如每个页面都有一样的头部和底部,那么我们就可

    2024年02月09日
    浏览(34)
  • Vue——formcreate表单设计器自定义组件实现

    form-create 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。支持3个UI框架,并且支持生成任何 Vue 组件。内置20种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定。 虽然form-create已经内置了许多组件,但如果我们需要的组件不是常

    2024年02月06日
    浏览(36)
  • vue + element UI 表单中内嵌自定义组件的表单校验触发方案

    在表单中,可能部分表单项需封装成自定义组件,如何在表单提交时,能同步触发自定义组件的表单校验? 将表单绑定的变量传入自定义组件中,在自定义组件中定义表单校验规则 内嵌自定义组件 srctestindex.vue srctestsearch_job.vue

    2024年02月14日
    浏览(35)
  • Vue——formcreate表单设计器自定义组件实现(二)

    前面我写过一个自定义电子签名的formcreate表单设计器组件,那时初识formcreate各种使用也颇为生疏,不过总算套出了一个组件不是。此次时隔半年又有机会接触formcreate,重新熟悉和领悟了一番各个方法和使用指南。趁热打铁将此次心得再次分享。 本次要实现的自定义组件是一

    2024年02月14日
    浏览(40)
  • Vue 自定义仿word表单录入之日期输入组件

    因项目需要,要实现仿word方式录入数据,要实现鼠标经过时才显示编辑组件,预览及离开后则显示具体的文字。 鼠标经过时显示 正常显示及离开时显示  组件代码 引用组件,支持数据双向绑定

    2024年02月02日
    浏览(38)
  • 高性能、高扩展、高稳定:解读 EasyMR 大数据组件自定义可扩展能力

    随着互联网技术的不断发展以及大数据时代的兴起,企业对于数据分析和洞察的需求日益增长。大多数企业都积累了大量的数据,需要从这些数据中快速灵活地提取有价值的信息,以便为用户提供更好的服务或者帮助企业做出更明智的决策。 然而在不同的数据场景中,企业往

    2024年02月16日
    浏览(28)
  • Vue 自定义仿word表单下拉框组件,让操作更符合用户习惯

    预览时显示界面 进入编辑框时   组件代码 使用组件 以上代码仅作参考,如需完整代码可以私信我。

    2024年01月20日
    浏览(25)
  • vue3+ts+uniapp小程序端自定义日期选择器基于内置组件picker-view + 扩展组件 Popup 实现自定义日期选择及其他选择

    vue3+ts 基于内置组件picker-view + 扩展组件 Popup 实现自定义日期选择及单列选择 自我记录 直接上代码 srccomponentshbcy-popup.vue srcutilsindex.ts 全局自动导入看(https://blog.csdn.net/zhgweb/article/details/132499886?spm=1001.2014.3001.5502 第11标题 没有配置全局自动导入的需要自己手动引入! srcpage

    2024年02月11日
    浏览(37)
  • vue3+ts+uniapp小程序端自定义日期选择器基于内置组件picker-view + 扩展组件 Popup 实现自定义日期选择及其他单列选择

    vue3+ts 基于内置组件picker-view + 扩展组件 Popup 实现自定义日期选择及单列选择 自我记录 直接上代码 srccomponentshbcy-popup.vue srcutilsindex.ts 全局自动导入看(https://blog.csdn.net/zhgweb/article/details/132499886?spm=1001.2014.3001.5502 第11标题 没有配置全局自动导入的需要自己手动引入! srcpage

    2024年02月10日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包