今天写了个表格组件,一开始各种V-if判断,是文字还是icon之类的。然后想到一个好办法,组件代码瞬间减少了一堆。
传入数据的时候,是数组对象模式。关键在于构造数据的时候把数据想要的样式名记为属性名。
直接上组件代码,app上的,用view代替div,看思路:
<view class="font-size-12">
<view class="title">
<view v-for="(item, key) in title" :class="key">{{item}}</view>
</view>
<view class="table-row" v-for="item in data">
<view v-for="(cell, key) in item" :class="key">{{cell}}</view>
</view>
</view>
比如以下数据:
{state:0, startTime:‘2021-11-30 12:00:00’, number:‘15kWh’, wasteTime:‘12:15’},
{state:1, startTime:‘2021-11-30 12:00:00’, number:‘15kWh’, wasteTime:‘00:30’},
{state:2, startTime:‘2021-11-30 12:00:00’, number:’–’, wasteTime:’–’},
{state:1, startTime:‘2021-11-30 12:00:00’, number:‘15kWh’, wasteTime:‘02:13’},
转化成
{icon-shibai:‘’, startTime:‘2021-11-30 12:00:00’, number:‘15kWh’, wasteTime:‘12:15’},
{icon-wancheng:‘’, startTime:‘2021-11-30 12:00:00’, number:‘15kWh’, wasteTime:‘00:30’},
{icon-jinhangzhong:‘’, startTime:‘2021-11-30 12:00:00’, number:’–’, wasteTime:’–’},
{icon-jinhangzhong:‘’, startTime:‘2021-11-30 12:00:00’, number:‘15kWh’, wasteTime:‘02:13’},
这样直接做表格的时候,把属性名存为动态class,就行了,再把有些特殊的写进对应样式,比如iconfont的样式,直接写到icon-xxxx中:举例:
.icon-shibai{
color: #ff513a !important;
}
.icon-wancheng{
color: #00F6FF !important;
}
.icon-jinhangzhong{
color: #1D97FF !important;
}
.icon-shibai,
.icon-wancheng,
.icon-jinhangzhong{
width: 32rpx;
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
}