小程序开发--表格table的实现
表格table的实现
Github
:https://github.com/tomsiebel/MGTableView--MiniProgram
Gitee
:https://gitee.com/siebel/MGTableView--MiniProgram
说表格前先说下 列表渲染wx:for
及block
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的实现相关推荐
- 微信小程序的表格table
今天开发微信小程序,在微信小程序的开发文档中,找组件,发现没有table组件.当时我的那个心情呀,各种不爽.于是,我打算自己写几个<text></text>来代替表格吧.然后就 ...
- 小程序绘制表格table(表头固定,可上下左右滑动)
某天在写小程序表格时偶然发现小程序没有table标签,在微信小程序社区搜索了一番发现官方给出的说法是view能够满足table样式,足以替代table标签. 以下用原生的小程序代码写了一版简单的表格, ...
- android 上下左右滑动的表格,适用小程序的表格table,冻结行,冻结列,可左右,上下滑动...
更新记录 1.0.0(2020-07-22) 1.暂时适用于微信小程序, 2.点击首列跳转或提示 3.首列合并行,首列背景色不一样 4.点击行变背景色 平台兼容性 app 微信小程序 支付宝小程序 百 ...
- 微信小程序上实现 table 表格
微信小程序不支持 table 标签,在网上找到一个使用 flex 来实现表格的简明例子,记录一下. table.wxml <view class="table">< ...
- 微信小程序用表格<table></table>查看数据
微信小程序不支持 table 标签,所以自己写了一个,记录一下方便以后可以直接复制使用 图片,可以自己修改样式 index.js,也就是数据,这里写死,可以字自己对接口 ** [ ] index.wx ...
- 微信小程序开发初体验
前言 最近不太忙,正好前两天看到园子里的大牛分享的微信小程序前端的UI界面--WeUI,看着非常不错,所以尝试着写了一下微信小程序 一.简单介绍下WeUI WeUI 是一套同微信原生视觉体验一致的基础 ...
- Java后台微信点餐小程序开发最新版笔记,Springboot+Mysql+Freemarker+Bootstrap+微信小程序实现扫码点餐小程序,包含语音提示,微信消息推送,网页管理后台
由于之前的Java后台微信点餐小程序有些知识点过时了,所以今天重新出一版,把里面过时的知识点更新下 前五章是部署笔记,后面是知识点的详细讲解,大家可以先看部署笔记,部署起来后,再跟着详细知识学习. 第 ...
- 养车记账本小程序开发教程
前言 自微信6.5.3版本开始,小程序正式跟大家见面了.最近利用业余时间做了个小程序,命名"养车记账本".作为IT狗,经历了从注册开发者资质开始到正式上线的全过程,微信小程序官方 ...
- 养车记账本小程序开发实例
前言 自微信6.5.3版本开始,小程序正式跟大家见面了.最近利用业余时间做了个小程序,命名"养车记账本".作为IT狗,经历了从注册开发者资质开始到正式上线的全过程,微信小程序官方 ...
最新文章
- 网络安全系列之九 WAF的基本配置
- TypeScript 素描 - 函数
- linux内核中用来对共享资源进行隔离,简单理解Docker
- ssh服务器拒绝了密码 请再试一次 Xftp5连接失败
- AI Challenger 2018:细粒度用户评论情感分析冠军思路总结
- 刚入门的UI设计师,需要懂的图标设计规范?
- 关于字符串匹配算法研究
- wps改照片底色有红边_入学攻略丨证件照的三种换底色方式,你知道了吗?
- 对象行为型 - Observer观察者模式
- Ajax实现--javascript
- bzoj 3237: [Ahoi2013]连通图 并查集+线段树分治
- jeecms oracle v5_如何在linux中搭建JEECMS系统
- 雷神笔记本关闭触摸板
- IE11不兼容css3渐变属性
- [02]Hello World!
- 微信小程序●云开发部署攻略
- 测定Linux内核100ms的时钟滴答数
- php文件是不是死链,什么是死链?
- 超出三行部分用省略号显示_如何用三行数学建立神经网络
- C语言单片机压力传感器报警器,单片机压力传感器的实时监测和报警程序