最近开发的小程序中,提到了一个需要一张可编辑的表格,固定列可增加行,并且需要可改变任意单元格的内容。

项目地址:wxTable-sawyersven

页面布局

表格主体采用flex布局来模拟实现。分别用tr和td代表行和每个单元格,由于需要展示的内容较多,所以使用scroll-view来让表格可以
水平滑动。

<scroll-view scroll-x style="width: 100%" class="table"><block wx:for="{{tables}}" wx:for-item="table" wx:for-index="table_index"><view class="tr gray" wx:if="{{table_index % 2 == 0}}"><view class="td" wx:for="{{table}}" wx:item="item" bindtap="openModal" data-id="{{table_index}}">{{item}}</view></view><view class="tr" wx:else><view class="td" wx:for="{{table}}" wx:item="item" bindtap="openModal" data-id="{{table_index}}">{{item}}</view></view></block>
</scroll-view>
.table {border: 0px solid darkgray;font-size: 12px;
}.tr {display: flex;width: 2700rpx;align-items: center;
}.td {width: 400rpx;height: 4rem;justify-content: center;text-align: center;word-wrap: break-word;flex-shrink: 0;line-height: 4rem
}
.gray{background:#E6FE3F9;
}

效果图如下:

[外链图片转存失败(img-z7zwNo21-1567648625579)(http://test.td/mock/images/1.png)]

由于每个单元格未来内容比较多,所以一屏只展示两个单元格,其余单元格需向右滑动才能看到,所以截图效果要差一点(手动滑稽)

对表格的编辑我们决定放入一个模态框里,点击每个单元格以后弹出模态框显示整行数据和标题,从而让用户选择要编辑的内容,效果图如下:

[外链图片转存失败(img-ZtWMFvqE-1567648625580)(http://test.td/mock/images/2.png)]

上图的每个input从上而下代表每一行1到6个单元格,input左侧显示table的标题(也就是tables的第一行)

模态框代码

<view wx:if="{{show}}" class="mask-form"><view class="mask-content-container" wx:for="{{cols}}" wx:for-item="col" wx:for-index="col_index"><text class="list-mask-title">{{titles[col_index]}}</text><input class="list-mask-input" type="text" value="{{col}}" data-id="{{col_index}}" bindblur="dataChange" /></view><button class="btn btn-confirm" type="success" bindtap="editModel">确认</button><button class="btn btn-cancle" type="default" bindtap="closeModel">取消</button>
</view>

模态框渲染出来的组里,text用来显示title,input里面是单元格的内容。

表格编辑

布局结束以后要进入重头戏,也就是如何去编辑我们table的每个单元格

假设我们获取到的数据是一个二维数组即:

page({data:{tables:[['标题1','标题2','标题3','标题4','标题5','标题6'],['内容1','内容2','内容3','内容4','内容5','内容6'],['内容1','内容2','内容3','内容4','内容5','内容6'],    ['内容1','内容2','内容3','内容4','内容5','内容6'],]}
})

点击单元格获取数据

我们在之前的页面中已经通过table_index为每个单元格指定它属于tables里的哪一个数组,通过data-id

所以页面里的数据应该是这样:

[外链图片转存失败(img-H3k1gZiT-1567648625581)(http://test.td/mock/images/3.png)]

我们将每个单元格都绑定在openModal方法上, 并且通过传入的data-id获取到对应的整行数据。

 openModel(e) {let id = e.target.dataset.id;this.setData({titles: this.data.tables[0],cols: this.data.tables[id],id: id,show: true});},

cols:通过传入的id获取到的对应数组

show:决定模态框的显示状态。

id:将获取到的id保存在data中

提交修改

input的bindblur方法在修改input后将input的值保存在数组中。

  dataChange(e) {let cols = this.data.cols;cols[e.target.dataset.id] = e.detail.value;console.log(cols);this.setData({cols: cols});},

点击模态框的确认按钮时,将修改过的数组进行保存。

editModel(e) {let tables = this.data.tables;tables[this.data.id] = this.data.cols;this.setData({tables: tables,show: false});},

最后将整个tables数据传给服务器进行保存。

这样,我们就实现了一个可以编辑每个单元格的table。

如果有任何不妥或错误之处,欢迎指出。

微信小程序实现一个可以编辑单元格的表格相关推荐

  1. 微信小程序开发一个小型商城(五、商品详情)

    上一篇文章:微信小程序开发一个小型商城(四.商品列表) 在从上一个界面跳转过来,会看到商品详情这个界面goods_detail :如下图所示: 页面分析:从上到下:一个轮播图+一个view标签存储商品 ...

  2. android商品数量加减,微信小程序实现一个简单的商品数量加减案例

    简介 这是一个用微信小程序原生代码实现的数量加减demo,主要是用于商品购物车或者商品详情修改数量使用,很简单哦~~~. 核心js方法说明addCount(增加数量) delCount (减少数量) ...

  3. 3元购买微信小程序解决方案一个月

    3元购买微信小程序解决方案一个月 参考文章: (1)3元购买微信小程序解决方案一个月 (2)https://www.cnblogs.com/wqcheng/p/7458808.html 备忘一下.

  4. 微信小程序开发一个小型商城(八、个人页面)

    上一篇文章:微信小程序开发一个小型商城(七.支付页面) 在上方还是使用wx:if进行判断是否有登录的数据,有的话将数据当中的图片和名字渲染到页面当中,不存在的话使用一个登录按钮表示需要用户登录.往下分 ...

  5. 微信小程序,一个有局限的类似 React Native 轮子

    微信小程序就是一个类似RN的轮子,可以快速开发,有一定的适用场景,但是也有其局限性.(结论是基于微信小程序的示例代码做的解读,可能存在谬误. 文末有好奇心日报小程序的二维码,欢迎围观. 2016年11 ...

  6. 微信小程序,一个有局限的类似 React Native 轮子!

    微信小程序就是一个类似RN的轮子,可以快速开发,有一定的适用场景,但是也有其局限性.(结论是基于微信小程序的示例代码做的解读,可能存在谬误. 文末有好奇心日报小程序的二维码,欢迎围观. 2016年11 ...

  7. PHP进度条 小程序,用微信小程序实现一个圆形的进度条

    随着小程序的热度下降,更多的人已经开始静下心来开发微信小程序了,最近在开发一款微信小程序的过程中遇到了一个问题:如何用微信小程序实现一个圆形的进度条?整理一番后,记录下来与大家共享. 代码实现的思路原 ...

  8. 微信小程序实现一个文件管理器

    微信小程序实现一个文件管理器 虽然标题说是实现一个文件管理器,但我是用来管理预加载小程序可能用的网络资源的,尤其是要是用音效资源时. 小程序的包体即便是分包也是每个分包的资源大小是2m,像音频资源,使 ...

  9. 微信小程序开发一个小型商城(四、商品列表)

    上一篇文章,微信小程序开发一个小型商城(三.商品分类设计) 在从上一个界面跳转过来,会看到商品列表这个界面:如下图所示: 页面分析:从上到下:分别是一个已经定义好的自定义组件,下面的综合,销量,也是一 ...

最新文章

  1. Kappa:比Lambda更好更灵活的实时处理架构
  2. 汇编和python-Python入门你要懂哪些?这篇文章总算讲清楚了
  3. matlab 表格控件,[转载]matlab读取excel数据并显示在excel(activex控件)中
  4. firefox+android+平板,Firefox模拟手机浏览器(iOS+Android) – UserAgent Switcher使用方法...
  5. 你必须掌握足够的知识来明确如何拥有自己的观点。同时,也要培养把自己的观点付诸现实的能力。...
  6. 张睿:OpenH264拥有产品级的鲁棒性 欢迎contribute
  7. linux帮助命令和用法,Linux命令帮助及history命令的使用
  8. 库克:5G iPhone目前还不是我们考虑的问题
  9. Netty工作笔记0032---零拷贝AIO内容梳理
  10. 解决zabbix-4系列监控图形中文乱码问题
  11. 数字图像处理 冈萨雷斯(第四版)图像分辨率及大小,灰度级变化的影响,以及邻接、连通、区域和边界笔记
  12. 【HUSTOJ】1055: 字符图形11-字母正三角
  13. 网盘搜索引擎(持续更新中)
  14. C++数据采集软件和数据显示软件(TCP通信)
  15. 嵩天-Python语言程序设计程序题--第六周:组合数据类型
  16. logit回归怎么看显著性_SPSS:Logistic回归(Logistic regression)概述
  17. thinkphpJWT
  18. rhel8安装docker-ce
  19. 31、SpringBoot(1)
  20. 闲鱼无货源怎样选品,能够做到日入几百?

热门文章

  1. linux反复出现文件系统损坏,Linux日常维护之文件系统损坏后的修复
  2. CTO问我,为什么需要API网关?
  3. 会议,如何从智能走向智慧?——四川有生发布智慧会议平台
  4. 如何修改php文件后缀,php如何修改文件后缀名
  5. 自媒体推广有哪些好处?
  6. 帝国cms tag生成html,帝国cms如何自动填写tag标签【亲测】
  7. 只有浏览器显示找不到服务器dns
  8. windos找不到文件:打开fla文件时候报错!
  9. “墙裂”推荐!PDF文档办公必备的四大功能
  10. python atm银行取款系统_python ATM机 案例代码