近期用到elementUI里的table表格,但是循环渲染列的时候,想根据条件渲染列,无值不渲染,所以用到了v-if和v-for
直接上案例
需求是,有一个tableData,是一个对象数组,包含了key6,key7,key8…key26的值,但是有的值为null,就是列表的某项全部无值,
展示的时候,key6,…的名称是keyInd相对应的中文
<el-table-column :prop="'key'+(index+6)" :label="item" v-for="(item,index) in activeKeyInd" :key="index">
<template slot-scope="scope">{{getKeyVal(scope.row,item)}}</template>
</el-table-column>
//原data:
keyInd: ["基本工资","岗位工资","绩效奖励","奖金","加班工资","综合补贴","住房补贴","采暖费","交通费","其他收入1","其他收入2",
"住房公积金","养老保险","失业保险","医疗保险","工伤保险","生育保险","代扣税","考勤扣款","其他支出1","其他支出2","其他支出3"]
computed:{
activeKeyInd(){
let activeKey = this.keyInd.slice();
return activeKey.filter( (keyItem,keyIndex)=> { //过滤有值的key项
return this.tableData.find((item)=>{ //查找tableData里面的某key项有没有有值的
return item['key'+(keyIndex+6)];
})
})
}
}
getKeyVal(row,item){
//这里注意,不能直接用index获取,因为过滤后的数据,index已经改变,和keyInd的index不等,所以要根据值去拿index,再去拿key项名
let index = this.keyInd.findIndex((val)=>{
return val == item;
})
let keyName = "key"+(index+6);
return this.$validate.formatCurrency(row[keyName])
},