小程序封装一个表格组件

封装一个table组件关键就是要控制表头跟单元格之间的距离,建议不要使用flex:1;这个属性,有的机型会出现错位的情况,建议使用百分比或者rpx。

首先创建一个table组件,在properties属性中定义表格相关的属性,便于遍历渲染,提高组件的复用性。
开始传统的布局书写,表头跟单元格之间的循环分开来,通过循环表头的下标,来控制表头中的每个单元格之间的宽度。表格组件的行与列之间,先遍历后台返回的表格数据,然后在遍历一行中需要展示的元素属性值,这样表格组件就可以完全的展示出来了。
table.wxml

<view class='container'>
    <view class="tab-header">
      <view class="tab-header-td"
          wx:for="{{tabHDate}}"
          wx:key="index"
          style="width:{{tabW[index]}}rpx"
      >
          {{item}}
      </view>
    </view>
    <view >
      <view class="tab-row"
          wx:for="{{rowData}}"
          wx:key="index"
      >
        <view 
            class="tab-row-td"
            wx:for="{{rowKey}}"
            wx:key="idx"
            wx:for-index="idx"
            wx:for-item="row"
            style="width:{{tabW[idx]}}rpx"
        >
          <view>{{item[row]}}</view>
        </view>
      </view>
      <view wx:if="{{rowData.length===0}}" class="no-text">暂无内容</view>
    </view>
    
</view>

table.css

/* components/table/table.wxss */
.container {
  height: 20rpx;
  padding: 0 20rpx;
} 
.tab-header,.tab-row{
  width: 100%;
  height: 94rpx;
  display: flex;
  align-items: center;
  background: #DEF1FF;
  
}
.tab-header-td,.tab-row-td{
  height: 100%;
  border-right: 1rpx solid #FFFFFF;
  display: flex;
  justify-content:center;
  align-items: center;
  text-align: center;
  overflow: hidden;
  
}
.tab-header-td:last-child,.tab-row-td:last-child{
  border-right: none;
}
.tab-row{
  background: #fff;
  
}
.tab-row:nth-child(2n){
  background: #EDEDED;
}
.tab-row-td view{
     display: -webkit-box;
     -webkit-box-orient: vertical;
     -webkit-line-clamp: 2;
     overflow: hidden;
}
.no-text{
  text-align: center;
  font-size: 28rpx;
  color: #999;
  margin-top: 20rpx;
}

声明表格中需要获取的数据格式
table.js

properties: {
    tabW: {
      // 表格每一列的宽度
      type: Array,
      value: []
    },
    tabHDate: {
      // 标题内容
      type: Array,
      value: []
    },
    rowData: {
      type: Array, // 表格数据
      value: []
    },
    rowKey: { // row属性
      type: Array,
      value: []
    }
  },

显示表格组件
在页面中的json中引入表格组件

"usingComponents": {
  "table": "/components/table/table"
}

向组件中传递所需要的属性

<table
 tabHDate="{{tabHDate}}"
 tabW="{{tabW}}"
 rowData="{{rowData}}"
 rowKey="{{rowKey}}"
/>

向表格组件传递相关的数据,

data: {
	tabHDate: ['日期', '入库时间', '出库时间', '操作人'], // 标题内容
    tabW: ['150', '210', '210', '140'],
    rowKey: ['time', 'enterTime', 'outTime', 'name'],
    rowData: [{
        time: '2020. 02.20',
        enterTime: '2020.02. 20 10:00',
        outTime: '2020.02. 20 10:00',
        name: '张三'
      },
      {
        time: '2020. 02.20',
        enterTime: '2020.02. 20 10:00',
        outTime: '2020.02. 20 10:00',
        name: '张三'
      },
      {
        time: '2020. 02.20',
        enterTime: '2020.02. 20 10:00',
        outTime: '2020.02. 20 10:00',
        name: '张三'
      }
    ],
}

最后的效果图
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值