查询回显input的封装

最近有幸在做一个管理系统采用的是vue+element-ui, 表单页面非常多, 而且都出奇的大,在多页面开发的时候做大表单的优缺点我大概先说一下, 我们的任务是, 基于现在的工具, 使他更简洁, 功能也不差, 而且更利于开发, 维护

直接进入正题

功能是这样:

表单中常有的功能是一个input绑定一个按钮, 当我点击按钮的时候, 弹出查询框, 里面有个小列表, 查到数据后点一行再回显, 很简单的需求, 但是会有大量的应用地点, 所以肯定不能复制粘贴, 输入框我们每次都可以写, 但是弹出来的小查询如果每个表单, 每个独立的弹框再去重复写就麻烦了, 但是如果我们把它提出来我们就轻松很多, 通过数据去控制功能

有些人可能觉得都是废话, 而且就这么个简单的东西, 写这么多有必要么(我想尽量的把我想到的说出来, 手动滑稽)

要做的就是这个查询的小列表, 我们整理一下要做的事情, 先做规划再写代码, 避免边写边改, 不然会让代码越来越难维护, 写到下面发现上面不该那么写, 再去改又懒的改, 然后就郁闷着勉为其难的提交上去了, 虽然功能在但自己看着都......

1. 分析需求: 我们需要什么元素?

a. 一个form表单, 一个table, 分页(布局)

b. n个条件框, 查询按钮, 重置按钮, 其他功能按钮(form内部)

通过整理元素我们知道, 有几样东西是固定的, 一个form, 一个不知道几列的table, 一个分页功能,查询, 重置按钮

整理出这个我们就可以第一步把元素构建全, 可能有n个的我们就用一个先占个位置, 结构如下:

<div class="box"><div class="form"><form action=""><input type="text"> *n</form></div><div class="table"><table><tr> *n<td></td></tr></table></div><div class="paging"></div><div class="button"><button>查询</button><button>重置</button><button>其余功能</button> *n</div>
</div>

*n的地方代表了接下来我们要用循环创建

2. 我们需要实现什么方法并且那些是要外部传递的

a. 查询

b. 点击分页后查询数据

c. 重置

d. 选中一行时拿到数据

e. 其余功能的触发

这样一梳理, 就很清晰了, 因为我们的查数据和分页在一个接口中我就讲分页查询, 和普通查询放到了一个函数里, 所以methods中实现剩下的四个方法

methods: {searchData(pageNum = 0) {//查询数据, ES6参数赋值默认为0页},selectRowData(row) {//选中单行是触发的函数, 在各个ui框架table中都应该有这个方法, 我们只要实现它就行了},resetSearchForm() {//重置form参数},doFunction(){//执行其他函数}
}

好了, 接下来看看那些需要是外部传入的方法, 以及为什么要从外部传入

i. 首先是一个查询数据的方法

理由: 我们需要从外部传入, 这是个查询列表的组件, 我们肯定不是只适用于一个接口, 而是尽量让他各种各样情形下都适用于我们

ii. 选中单行后要传给父组件的方法

在vue中, 子组件是不能修改父组件的, 在框架封装中大部分是作者自己封装了dispatch 和 broadcast, 但是我们就应用于自己的项目, 所以我们不用那么麻烦, 如果想用可以去ui框架源码中复制一份出来用, 我们就通过父组件传一个函数给子组件, 然后子组件调用这个函数回调给父组件就好了, 所以要传一个函数

iii. 其他的执行函数

3. 我们要vue的data参数了, 并确定哪些是在组件中, 哪些是外部传入

a. from表单的数据绑定(但是我们不确定要有几个框所以这里要多留一步)

没错就这一个就够了, 我们要做的是可动态配置所以更多的来自于传参

a. 传入一个input数组, 决定有几个条件搜索框

b. 传入table的列的数组, 附带上每列宽度, 列名

c. 传入其他功能按钮列表数组

d. 传入查询出来的分页参数

e. 传入查询出来的数据列表数组

4. 有了这些我们接下来就是一一实现这些东西就好了

还是先从结构开始

<div class="searchAlert"><div class="inputBox"><el-form :inline="true" :model="searchForm" class="searchAlertForm" ref="searchForm"><!--循环创建条件搜索框--><el-form-item v-for="item in inputarr" :key="item.label" :prop="item.dataName"><el-tooltip :content="item.label" placement="top"><el-input v-model="searchForm[item.dataName]" :placeholder="item.label" size="mini"></el-input></el-tooltip></el-form-item></el-form></div><div class="tableBox"><el-table :data="searchdatalist" style="width: 100%" size="mini" highlight-current-row@current-change="selectrowdata" :border="true"><!--循环创建table列--><el-table-column v-for="item in coleumarr" :key="item.label" :prop="item.prop" :label="item.label":width="item.width"></el-table-column></el-table></div><!--判断是否显示页码条--><div class="pagination" v-if="searchpaging"><el-pagination layout="prev, pager, next" :total="searchpaging.totalPage" :small="true":page-size="searchpaging.pageSize" @current-change="searchdata"></el-pagination></div><div class="buttonBox"><el-button size="mini" @click="resetsearchform">重置</el-button><el-button size="mini" @click="searchdata" type="primary">搜索</el-button><el-button size="mini" v-for="btn in buttonArr" :key="btn.name" size="mini" @click="doFunction(btn.name)" :type="btn.type">btn.name</el-button></div></div>

5. 实现可供循环创建的数组结构

a. form(先创建一个, 然后放到数组中就好了)

{label:"输入框的名称"dataName:"作为双向数据绑定的名字, 同时作为绑定prop的名字"
}

现在来看我们是不能在这个组件中直接定义好form的model结构的, 我们就要动态创建, 在组件中我们只要创建一个空的对象就好了

b. table-col

{label:"列名称"prop:"对应列内容的字段名"width:"单列宽度"
}

c. button

{name:"事件和按钮名字",type:"按钮类型"
}

6. 接下来我们去实现我们要传入的方法

//回显功能, 可以拿到单选数据searchCbFn(rowData) {console.log(rowData)},//查询功能, 分页等searchFn(formData, pageNum = 0) {api({formData:formData, pageData:pageNum}).then(res => {console.log(res.data)this.searchDataList = res.data.dataList//页面展示 分页大小控制this.searchPaging = { ...pagInfo, pageSize: 5 }}).catch(err => {throw err;})}

7. 最后我们就要补齐所有传入参数

searchDataList:{}searchPaging:{}

最后总结:

这是我第一次写分享问, 所以应该还欠缺写逻辑, 如果什么不懂, 或者建议, 请多多告诉我, 代码我放在:https://github.com/wqliusong/happy有组件, 有可以直接运行的单页面

再说一下我遇到的问题吧, 一个就是vue的双向数据绑定是可以动态的,提醒一下大家, 对象后加动态的名字要用[], 不能用.的, 注意我的input那里就懂了, data里的参数也可以动态创建的, 有了这些我们可以解决很多问题, 所以我们不用很在意他的初始数据格式

接下来我还会写一个多行编辑的组件, 虽然很多ui中也有, 但是功能都略显单一, 可能我们程序员就是只要会1+1=2, 就能解决所有数学难题了的一帮人, 我要尝试让他功能丰富一点, 在一个就是关于动态增加验证条件的一些实现, 希望大家能有点收获

如何根据原理图画封装_如何根据业务封装自己的功能组件相关推荐

  1. python异常类封装_在Python中封装异常

    如何使应用程序与使用过的库依赖关系所引发的异常脱钩? [app] --uses--> [lib] --dependson--> [dependency] / / x- \ / `----- ...

  2. java mvc数据库 封装_关于SpringMvc参数封装_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...

    SpringMVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring MVC 分离了控制器.模型对象.分派器以及处理程序对象 ...

  3. 如何根据原理图画封装_画了这么多年PCB,你真的了解原理图吗?

    原标题:画了这么多年PCB,你真的了解原理图吗? 在执行原理图导入PCB操作之前,通常需要对原理图封装的完整性进行检查,以确保所有的元件都存在封装或者路径匹配好,以避免出现无法导入或者导入不完全的情况 ...

  4. 微型计算机原理及其应用彭楚武答案第三章,微机原理及其应用_第1章.ppt

    微机原理及其应用_第1章微机原理及其应用_第1章 本课程的考核方式: 开卷考试 评分标准: 期末考试成绩占70 %. 实验成绩占10 %. 课堂考核及作业占20% . 全院各专业统一命题.流水作业阅卷 ...

  5. ad中电容用什么封装_【AD封装】VH3.96mm插件座子(带3D)

    VH3.96mm插件座子 包含了我们平时常用的VH3.96mm间距的插件座子,总共28种封装及精美3D模型.完全能满足日常设计使用.每个封装都搭配了精美的3D模型哦. ❖ VH一般是3.96mm线到板 ...

  6. linux的原理和运用,Linux操作系统原理与应用_内存寻址

    原标题:Linux操作系统原理与应用_内存寻址 第五讲今天上线啦. 在本次课程中,陈老师详细的讲解了有关于内存寻址的演变的相关知识. 第一部分中,介绍了关于内存寻址的相关背景知识.内存寻址-操作系统设 ...

  7. 交换机与路由器技术:远程管理交换机和路由器工作原理、路由器转发数据包的封装过程

    目录 一.通过远程管理方式连接交换机 1.teInet是应用层协议基于传输层TCP,默认端口号:23 2.ssh是应用层协议基于传输层TCP默认端口号:22 3.思路 3.1.telnet 3.2.s ...

  8. proteus8如何画封装_如何proteus原理图生成pcb?步骤详解

    时下,利用Keil C51和Proteus来进行单片机系统开发已成为众多单片机爱好者的首选.Keil C51和Proteus的结合可以进行单片机系统的软件设计和硬件的仿真调试,可大大缩短单片机系统的开 ...

  9. 微型计算机循环结构程序设计,微机原理实验之_分支程序、循环程序设计

    <微机原理实验之_分支程序.循环程序设计>由会员分享,可在线阅读,更多相关<微机原理实验之_分支程序.循环程序设计(6页珍藏版)>请在人人文库网上搜索. 1.实验三分支程序.循 ...

最新文章

  1. 系统利益相关者描述案例
  2. CactiEZ安装配置教程
  3. 2018/12/07 L1-033 出生年 Java
  4. 什么样的编程姿势才没有bug
  5. Django--实现分页功能,并且基于cookie实现用户定制每页的数据条数
  6. java 静态导入_Java中静态导入的使用
  7. 最长重复子串_3. 无重复字符的最长子串
  8. 利用Enterprise Library中的DAAB构造的数据库访问架构
  9. 关于Windows美化的小结
  10. Ubuntu安装google中文输入法
  11. 谷歌play商店_不断关闭时如何修复Google Play商店
  12. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十五║初探SSR服务端渲染(个人博客二)...
  13. 电脑版微信提示音mp3_短的微信提示音什么好?40首好听的微信提示音试听下载...
  14. GD32450i-EVAL学习笔记 12 - EXMCNandFlash
  15. 使用 IDEA 几分钟就重构了同事800 行又臭又长 的类!真香!
  16. html div缩放
  17. 常见的互联网名词 O2O、B2B、C2C等
  18. Python实现数字的补数的两种方法
  19. 百度文库推广怎么做-百度文库推广技巧
  20. 基于单片机的环境监测调节系统设计(#0516)

热门文章

  1. 权重对生成对抗网络GAN性能的影响
  2. Matlab参考函数
  3. python程序多线程_Python-多线程编程
  4. 【UWB】Savitzky Golay filter SG滤波器快速入门并上手使用
  5. 【UAV】气压计 SPL06
  6. 【数理知识】《积分变换与场论》王振老师-第2章-拉普拉斯变换
  7. 3.7 为什么需要非线性激活函数-深度学习-Stanford吴恩达教授
  8. 【S操作】轻松优雅防止(解决)两次掉进同一坑的完美解决方案,arduino通知提醒方案...
  9. 【PC工具】更新简单好用绿色IP地址扫描工具,内部网络设备查看工具,内网ip查询ip扫描工具,电脑IP地址查看方法...
  10. 【随机共振】基于随机共振的高频弱信号检测的MATLAB仿真