表格table的实现

Github:https://github.com/tomsiebel/MGTableView--MiniProgram

Gitee:https://gitee.com/siebel/MGTableView--MiniProgram

说表格前先说下 列表渲染wx:forblock

wx:for

在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。
默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item

示例代码1
index.wxml

<!--index.wxml-->
<view wx:for="{{array}}">{{item}}</view>

index.js

// index.js
Page({data: {array: [1, 2, 3, 4, 5]}
})

打印结果
1
2
3
4
5

示例代码2

index.wxml

<!--index.wxml-->
<view wx:for="{{array}}">{{index}}: {{item.message}}</view>

index.js

// index.js
Page({data: {array: [{message: 'foo',}, {message: 'bar'}]}
})

打印结果
0:foo
1:bar

注:item为数组当前元素的变量名,可以通过wx:for-item制定变量名

列表渲染属性

  • wx:for-item 可以指定数组当前元素的变量名
  • wx:for-index 可以指定数组当前下标的变量名
  • wx:key 指定列表中项目的唯一的标识符

wx:for-item

wx:for-item指 定数组当前元素的变量名,默认item
wx:for-item="itemName",则下面的循环变量名itemName

wx:for-index

wx:for-index 可以指定数组当前下标的变量名,默认index, 下标的值为从0递增,即第一个元素为index=0
wx:for-index="idx",则下面的循环数组的下标名变为idx 即第一个元素变为idx=0

示例代码
index.wxml

<!--index.wxml-->
<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName"> {{idx}}: {{itemName.message}}</view>

index.js

// index.js
Page({data: {array: [{message: 'foo',}, {message: 'bar'}]}
})

打印结果
0:foo
1:bar

wx:key

如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 中的输入内容, 的选中状态),需要使用 wx:key 来指定列表中项目的唯一的标识符。

wx:key 的值以两种形式提供

1. 字符串,代表在 for 循环的 array(数组) 中 item 的某个 property(属性),该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。

2.保留关键字 *this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字

如:
当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。

### 如不提供 wx:key,会报一个 warning, 如果明确知道该列表是静态,或者不必关注其顺序,可以选择忽略。

示例代码
效果展示

index.wxml

<view class='firstView'><switch wx:for="{{objectArray}}" wx:key="unique" style="display: block;">{{item.id}}</switch><button type="primary" bindtap="switchClick">确定属性可以动态改变单一属性的值</button><button type="primary" bindtap="addToFront">添加数据到列表中</button>
</view><view class='secondView'>
<switch wx:for="{{numberArray}}" wx:key="*this" style="display: block;">{{item}}
</switch>
<button type="primary" bindtap="addNumberToFront">添加数据到列表中</button>
</view>

index.wxss

/**index.wxss**/
switch{margin-left: 300rpx;
}
button{margin: 20rpx;font-size: 30rpx;
}

index.js

// index.js
Page({data: {objectArray: [{ id: 5, unique: 'unique_5' },{ id: 4, unique: 'unique_4' },{ id: 3, unique: 'unique_3' },{ id: 2, unique: 'unique_2' },{ id: 1, unique: 'unique_1' },{ id: 0, unique: 'unique_0' },],numberArray: [1, 2, 3, 4]},//确定属性可以动态改变单一属性的值switchClick(e) {const length = this.data.objectArray.lengthfor (let i = 0; i < length; ++i) {const x = Math.floor(Math.random() * length)const y = Math.floor(Math.random() * length)const temp = this.data.objectArray[x]this.data.objectArray[x] = this.data.objectArray[y]this.data.objectArray[y] = temp}this.setData({objectArray: this.data.objectArray})},//添加数据到列表中addToFront(e) {const length = this.data.objectArray.lengththis.data.objectArray = [{ id: length, unique: 'unique_' + length }].concat(this.data.objectArray)this.setData({objectArray: this.data.objectArray})},//添加数据到列表中addNumberToFront(e) {this.data.numberArray = [this.data.numberArray.length + 1].concat(this.data.numberArray)this.setData({numberArray: this.data.numberArray})}
})

注:
(1)当 wx:for 的值为字符串时,会将字符串解析成字符串数组
<view wx:for="array">{{item}}</view>
等同于
<view wx:for="{{['a','r','r','a','y']}}">{{item}}</view>

(2)花括号和引号之间如果有空格,将最终被解析成为字符串
<view wx:for="{{[1,2,3]}} ">{{item}}</view>
等同于
<view wx:for="{{[1,2,3] + ' '}}">{{item}}</view>

block

在条件渲染中block wx:if
因为 wx:if 是一个控制属性,需要将它添加到一个标签上。如果要一次性判断多个组件标签,可以使用一个 标签将多个组件包装起来,并在上边使用 wx:if 控制属性。

<block wx:if="{{true}}"><view>view1</view><view>view2</view>
</block>

在列表渲染中 block wx:for
类似 block wx:if,也可以将 wx:for 用在标签上,以渲染一个包含多节点的结构块。例如:
index.wxml

<!--index.wxml-->
<block wx:for="{{[1, 2, 3]}}"><view>{{index}}:</view><view>{{item}}</view>
</block>

注意: 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性。










下面回归正题如何写一个你想要的表格
知道了列表渲染wx:for 后其实表格只是css位置排序和添加竖线的问题
首先我画两条垂直的线

之后每添加一组数据只需要画出数据的下边缘和右边缘即可

下面我们上代码
示例代码
效果展示

代码
index.wxml

<!--index.wxml-->
<view class='title'>表格模板</view>
<view class="tableView"><view class="table_header"><view class="th th1">日期</view><view class="th th2">时间</view><view class="th th3">工作内容</view></view><!-- <block> 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性。 --><block wx:for="{{ listData }}" wx:for-item="work" wx:key="key"><view class="table_cell"><view class="td td1">{{work.date}}</view><view class="td td2">{{work.time}}</view><view class="td td3">{{work.content}}</view></view></block></view>

index.wxss

/**index.wxss**/
.title{width: 100%;text-align: center;font-size: 50rpx;font-weight: 900
}
.tableView{border:1px solid #000;border-right:0;border-bottom: 0;width: 98%;margin-left: 1%;
}
/* 表头 */
.table_header{display: flex;justify-content: space-between; /* 项目位于各行之间留有空白的容器内。 */background-color: #fffb00;width: 100%;font-size: 35rpx;color: #330e0e;text-align: center;font-weight: 900;
}
.th{display: flex;align-items: center;justify-content: center;height: 80rpx;border-bottom: 1px solid #000;border-right: 1px solid #000;
}
.th1,.th2{width: 20%
}
.th3{width: 60%
}
/* 表格cell */
.table_cell{display: flex;justify-content: space-between; /* 项目位于各行之间留有空白的容器内。 */width: 100%;font-size: 25rpx;color: #330e0e;text-align: center;
}
.td{display: flex;align-items: center;justify-content: center;height: 60rpx;border-bottom: 1px solid #000;border-right: 1px solid #000;}
.td1,.td2{width: 20%
}
.td3{width: 60%
}

index.js

// index.js
Page({data: {listData: [{ "date": "2019/01/01", "time": "9:00", "content": "工作内容1" },{ "date": "2019/01/01", "time": "10:30", "content": "工作内容2" },{ "date": "2019/01/01", "time": "12:00", "content": "工作内容3" },{ "date": "2019/01/01", "time": "2:30", "content": "工作内容4" },{ "date": "2019/01/01", "time": "3:30", "content": "工作内容5" },{ "date": "2019/01/01", "time": "4:00", "content": "工作内容6" },{ "date": "2019/01/01", "time": "5:00", "content": "工作内容7" },{ "date": "2019/01/02", "time": "9:00", "content": "工作内容1" },{ "date": "2019/01/02", "time": "10:30", "content": "工作内容2" },{ "date": "2019/01/02", "time": "12:00", "content": "工作内容3" },{ "date": "2019/01/02", "time": "2:30", "content": "工作内容4" },{ "date": "2019/01/02", "time": "3:30", "content": "工作内容5" },{ "date": "2019/01/02", "time": "4:00", "content": "工作内容6" },{ "date": "2019/01/02", "time": "5:00", "content": "工作内容7" }]},onLoad: function () {console.log('onLoad')}
})

附表格demo:

Github :https://github.com/tomsiebel/MGTableView--MiniProgram
Gitee :https://gitee.com/siebel/MGTableView--MiniProgram
CSDN: https://download.csdn.net/download/jackjia2015/11006399

小程序开发--表格table的实现相关推荐

  1. 微信小程序的表格table

    今天开发微信小程序,在微信小程序的开发文档中,找组件,发现没有table组件.当时我的那个心情呀,各种不爽.于是,我打算自己写几个<text></text>来代替表格吧.然后就 ...

  2. 小程序绘制表格table(表头固定,可上下左右滑动)

    某天在写小程序表格时偶然发现小程序没有table标签,在微信小程序社区搜索了一番发现官方给出的说法是view能够满足table样式,足以替代table标签. 以下用原生的小程序代码写了一版简单的表格, ...

  3. android 上下左右滑动的表格,适用小程序的表格table,冻结行,冻结列,可左右,上下滑动...

    更新记录 1.0.0(2020-07-22) 1.暂时适用于微信小程序, 2.点击首列跳转或提示 3.首列合并行,首列背景色不一样 4.点击行变背景色 平台兼容性 app 微信小程序 支付宝小程序 百 ...

  4. 微信小程序上实现 table 表格

    微信小程序不支持 table 标签,在网上找到一个使用 flex 来实现表格的简明例子,记录一下. table.wxml <view class="table">< ...

  5. 微信小程序用表格<table></table>查看数据

    微信小程序不支持 table 标签,所以自己写了一个,记录一下方便以后可以直接复制使用 图片,可以自己修改样式 index.js,也就是数据,这里写死,可以字自己对接口 ** [ ] index.wx ...

  6. 微信小程序开发初体验

    前言 最近不太忙,正好前两天看到园子里的大牛分享的微信小程序前端的UI界面--WeUI,看着非常不错,所以尝试着写了一下微信小程序 一.简单介绍下WeUI WeUI 是一套同微信原生视觉体验一致的基础 ...

  7. Java后台微信点餐小程序开发最新版笔记,Springboot+Mysql+Freemarker+Bootstrap+微信小程序实现扫码点餐小程序,包含语音提示,微信消息推送,网页管理后台

    由于之前的Java后台微信点餐小程序有些知识点过时了,所以今天重新出一版,把里面过时的知识点更新下 前五章是部署笔记,后面是知识点的详细讲解,大家可以先看部署笔记,部署起来后,再跟着详细知识学习. 第 ...

  8. 养车记账本小程序开发教程

    前言 自微信6.5.3版本开始,小程序正式跟大家见面了.最近利用业余时间做了个小程序,命名"养车记账本".作为IT狗,经历了从注册开发者资质开始到正式上线的全过程,微信小程序官方  ...

  9. 养车记账本小程序开发实例

    前言 自微信6.5.3版本开始,小程序正式跟大家见面了.最近利用业余时间做了个小程序,命名"养车记账本".作为IT狗,经历了从注册开发者资质开始到正式上线的全过程,微信小程序官方  ...

最新文章

  1. 网络安全系列之九 WAF的基本配置
  2. TypeScript 素描 - 函数
  3. linux内核中用来对共享资源进行隔离,简单理解Docker
  4. ssh服务器拒绝了密码 请再试一次 Xftp5连接失败
  5. AI Challenger 2018:细粒度用户评论情感分析冠军思路总结
  6. 刚入门的UI设计师,需要懂的图标设计规范?
  7. 关于字符串匹配算法研究
  8. wps改照片底色有红边_入学攻略丨证件照的三种换底色方式,你知道了吗?
  9. 对象行为型 - Observer观察者模式
  10. Ajax实现--javascript
  11. bzoj 3237: [Ahoi2013]连通图 并查集+线段树分治
  12. jeecms oracle v5_如何在linux中搭建JEECMS系统
  13. 雷神笔记本关闭触摸板
  14. IE11不兼容css3渐变属性
  15. [02]Hello World!
  16. 微信小程序●云开发部署攻略
  17. 测定Linux内核100ms的时钟滴答数
  18. php文件是不是死链,什么是死链?
  19. 超出三行部分用省略号显示_如何用三行数学建立神经网络
  20. C语言单片机压力传感器报警器,单片机压力传感器的实时监测和报警程序

热门文章

  1. AntD Button 图标集成 iconfont
  2. bootstrap之buttonJs
  3. 落实等级保护工作的意义简单说明
  4. AIX下创建jfs2文件系统并挂载到固定目录
  5. 设置漂亮的eclipse主题(Theme)风格
  6. elasticsearch-starter
  7. 【报告分享】中国消费者洞察报告-领航前所未有(附下载)
  8. halcon脚本-找直线并拟合
  9. 前端PS切片 常用不同格式图片区别
  10. 数据库--数据备份与恢复