vue 动态表单开发方法案例详解


Posted in Javascript onDecember 02, 2019

本文实例讲述了vue 动态表单开发方法。分享给大家供大家参考,具体如下:

概要

动态表单指的是我们的表单不是通过vue 组件一个个编写的,我们的表单是根据后端生成的vue模板,在前端通过vue构建出来的。主要的思路是,在后端生成vue的模板,前端通过ajax的方式加载后端的表单模板,权限数据和表单数据,在前端使用vue进行构建出来。

vue 动态表单开发方法案例详解

表单渲染过程。

实现步骤

1.在前端开发表单组件,比如用户组件,文本输入组件。

在平台中我们可以看到我们开发的组件。

vue 动态表单开发方法案例详解

组件的开发在第三篇有介绍。

我们定义的组件和后台配置的权限相关。

我们每个组件都定义了:

  • permission: 权限对象
  • permissionkey:权限对应的key

2.手机端模板代码

手机端模板是通过表单BO元数据生成的,我们可以在后端编辑手机端模板,我们现在看一下简单的手机表单VUE的模板。

<script>// 表单公式计算
var formulas_2400000001371061={};
// 表单日期计算
var dateCalcs_2400000001371061={};
//实体扩展JSON
var extJson_2400000001371061={};
//验证规则
var validRule_2400000001371061={"main":{"age":{"vtype":"length:50"},"name":{"vtype":"length:50"},"mobile":{"vtype":"length:50"}}};</script>
<yd-popup v-model="showUserDialog" position="center" width="100%">
  <rx-sysuser :single="singleUser" ref="sysUser" v-on:ok="selectUser" v-on:cancel="closeUserDialog()"></rx-sysuser>
</yd-popup>
<yd-popup v-model="showGroupDialog" position="center" width="100%">
  <rx-sysgroup :single="singleGroup" ref="sysGroup" v-on:ok="selectGroup" v-on:cancel="closeGroupDialog()"></rx-sysgroup>
</yd-popup>
<div class="div-form">
  <div class="caption">
    simpleform
  </div>
  <div class="form-container">
    <div class="form">
      <div class="form-title">
          name
      </div>
      <div class="form-input">
        <rx-input v-model="data.name" permissionkey="name" vtype="length:50" :readonly="readonly" :permission="permission.main"></rx-input>
      </div>
    </div>
    <div class="form">
      <div class="form-title">
          age
      </div>
      <div class="form-input">
        <rx-input v-model="data.age" permissionkey="age" vtype="length:50" :readonly="readonly" :permission="permission.main"></rx-input>
      </div>
    </div>
    <div class="form">
      <div class="form-title">
          mobile
      </div>
      <div class="form-input">
        <rx-input v-model="data.mobile" permissionkey="mobile" vtype="length:50" :readonly="readonly" :permission="permission.main"></rx-input>
      </div>
    </div>
  </div>
</div>

这个表单中:

我们可以看到我们自定义的组件,包括数据,权限部分,验证规则部分。

3.后端提供的数据部分。

我们可以看下后端提供的数据:

[{
    "result": true,
    "msg": "",
    "type": "",
    "formKey": "simpleform",
    "content": "<script>// 表单公式计算\r\nvar formulas_2400000001371061={};\r\n// 表单日期计算\r\nvar dateCalcs_2400000001371061={};\r\n//实体扩展JSON\r\nvar extJson_2400000001371061={};\r\n//验证规则\r\nvar validRule_2400000001371061={\"main\":{\"age\":{\"vtype\":\"length:50\"},\"name\":{\"vtype\":\"length:50\"},\"mobile\":{\"vtype\":\"length:50\"}}};</script><yd-popup v-model=\"showUserDialog\" position=\"center\" width=\"100%\"><rx-sysuser :single=\"singleUser\" ref=\"sysUser\" v-on:ok=\"selectUser\" v-on:cancel=\"closeUserDialog()\"></rx-sysuser></yd-popup><yd-popup v-model=\"showGroupDialog\" position=\"center\" width=\"100%\"><rx-sysgroup :single=\"singleGroup\" ref=\"sysGroup\" v-on:ok=\"selectGroup\" v-on:cancel=\"closeGroupDialog()\"></rx-sysgroup></yd-popup><div class=\"div-form\">\r\n\t<div class=\"caption\">simpleform</div>\r\n\t<div class=\"form-container\">\r\n\t\t\t<div class=\"form\">\r\n\t\t\t\t<div class=\"form-title\">\r\n\t\t\t\t\tname\t\t\t\t</div>\r\n\t\t\t\t<div class=\"form-input\">\r\n\t\r\n\t\t\t\t<rx-input v-model=\"data.name\" permissionkey=\"name_form\" vtype=\"length:50\" :readonly=\"readonly\" :permission=\"permission.main\"></rx-input>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"form\">\r\n\t\t\t\t<div class=\"form-title\">\r\n\t\t\t\t\tage\t\t\t\t</div>\r\n\t\t\t\t<div class=\"form-input\">\r\n\t\r\n\t\t\t\t<rx-input v-model=\"data.age\" permissionkey=\"age_form\" vtype=\"length:50\" :readonly=\"readonly\" :permission=\"permission.main\"></rx-input>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"form\">\r\n\t\t\t\t<div class=\"form-title\">\r\n\t\t\t\t\tmobile\t\t\t\t</div>\r\n\t\t\t\t<div class=\"form-input\">\r\n\t\r\n\t\t\t\t<rx-input v-model=\"data.mobile\" permissionkey=\"mobile_form\" vtype=\"length:50\" :readonly=\"readonly\" :permission=\"permission.main\"></rx-input>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t</div></div>\r\n\t",
    "permission": "{\"main\":{\"age\":{\"require\":false,\"right\":\"w\"},\"name\":{\"require\":false,\"right\":\"w\"},\"mobile\":{\"require\":false,\"right\":\"w\"}}}",
    "jsonData": {
      "age": "",
      "name": "",
      "mobile": ""
    },
    "description": "simpleform",
    "viewId": "2400000001371078",
    "boDefId": "2400000001371061",
    "timeStamp": "1523799818000",
    "params": {}
  }]

这里看到后端返回的数据主要包括:

  • content :表单内容
  • permission:表单权限
  • jsonData:表单数据

4.通过vue 将表单进行渲染

步骤:

1.将html放到容器中。

2.使用vue 将数据和模版渲染到容器中。

vue 动态表单开发方法案例详解

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
多个iframe自动调整大小的问题
Sep 18 Javascript
jQuery代码优化 事件委托篇
Nov 01 Javascript
js通过八个点 拖动改变div大小的实现方法
Mar 05 Javascript
JavaScript中获取鼠标位置相关属性总结
Oct 11 Javascript
jQuery设置和移除文本框默认值的方法
Mar 09 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
Dec 16 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
Feb 23 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
Jun 21 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
Apr 20 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
Jul 23 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
Aug 18 Javascript
分享ES6的7个实用技巧
Jan 18 Javascript
vue 开发之路由配置方法详解
Dec 02 #Javascript
vue 开发企业微信整合案例分析
Dec 02 #Javascript
vue 使用外部JS与调用原生API操作示例
Dec 02 #Javascript
node使用mysql获取数据库数据中文乱码问题的解决
Dec 02 #Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
Dec 01 #Javascript
angular8和ngrx8结合使用的步骤介绍
Dec 01 #Javascript
angular异步验证防抖踩坑实录
Dec 01 #Javascript
You might like
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
使用Apache的rewrite技术
2006/06/22 PHP
php处理restful请求的路由类分享
2014/02/27 PHP
PHP比你想象的好得多
2014/11/27 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
laravel 如何实现引入自己的函数或类库
2019/10/15 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
JavaScript 加号(+)运算符号
2009/12/06 Javascript
Javascript的构造函数和constructor属性
2010/01/09 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
javascript 动态创建表格
2015/01/08 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
手机端转换rem适应
2017/04/01 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
Windows上使用virtualenv搭建Python+Flask开发环境
2016/06/07 Python
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
PyQt5 多窗口连接实例
2019/06/19 Python
Django ModelForm操作及验证方式
2020/03/30 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
python中函数返回多个结果的实例方法
2020/12/16 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
如何获取某个日期是当月的最后一天
2013/12/05 面试题
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL
zabbix如何添加监控主机和自定义监控项
2022/08/14 Servers
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技