elementUI 动态生成几行几列 table
现在碰到一个需求:就是根据用户选择的行列,来自动生成相应大小的 table,如下这个实现还不完善,因为数据不对,只是实现了动态的效果,仅是提供一种实现思路吧,后续我会再想想看怎么实现为好,先记录一下吧
直接看代码吧
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>elementUI table 动态生成列 </title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<style type="text/css">
@import url("https://unpkg.com/element-ui/lib/theme-chalk/index.css");
</style>
</head>
<body>
<div id="app">
<el-form inline>
<!-- 先选择 排数 -->
<el-form-item label="请选择排" style="margin-left: 50px;">
<el-select style="width: 100% ;" v-model="row1" placeholder="请选择排" @change="row1Change">
<el-option v-for="item in floorNumList" :key="item.floorId"
:value="item.floorId"></el-option>
</el-select>
</el-form-item>
<!-- 再选择 列数 -->
<el-form-item label="请选择列">
<el-select style="width: 100% ;" v-model="col1" placeholder="请选择列" @change="col1Change">
<el-option v-for="item in floorNumList" :key="item.floorId"
:value="item.floorId"></el-option>
</el-select>
</el-form-item>
<el-table ref="multipleTable" :data="rowDataList1" style="width:80%; border: 2px solid red; max-height: 500px; margin-left: 30px;" highlight-current-row :cell-style="cellStyle">
<el-table-column fixed type="selection" align="center" width="50" label="列"></el-table-column>
<!-- <el-table-column type="index" align="center" width="50" label="索引"></el-table-column>-->
<el-table-column v-for="col in colDataList1" :prop="col.id" :label="col.id" align="center" >
<el-table-column prop="id" align="center" >
<template slot-scope="scope">
<el-button @click="handleClick(scope.row, col.id, scope.$index)" class="el-icon-cherry" v-bind:style="{color: activeColor}">></el-button>
</template>
</el-table-column>
</el-table-column>
</el-table>
</el-form>
</div>
</div>
<script>
let vm = new Vue({
el: '#app',
data(){
return{
floorNumList: [{floorId: 1},
{floorId: 2},
{floorId: 3},
{floorId: 4},
{floorId: 5},
{floorId: 6},
{floorId: 7},
{floorId: 8},
{floorId: 9},
{floorId: 10}
],
floorNum: '',
// 第 1 层 默认选择的排数 和 列数
row1: 1,
col1: 1,
// 第 2 层 默认选择的排数 和 列数
row2: 1,
col2: 1,
// 第 3 层 默认选择的排数 和 列数
row3: 1,
col3: 1,
// 第 4 层 默认选择的排数 和 列数
row4: 1,
col4: 1,
// 第 5 层 默认选择的排数 和 列数
row5: 1,
col5: 1,
activeColor: 'green',
colPos: '',
rowPos: '',
rowDataList1: [{ // 默认给一个对象, 即默认状态是 1 行数据
id: Math.ceil(Math.random()*100)
}],
colDataList1: [{id: '1'}
],
}
},
methods:{col1Change(){
// 每触发一次,清空数据
this.colDataList1 = [{id: '1'}];
// 取得 选中的第一层的第一排的数值
let len = this.col1;
if(len > 1){for (let i = 2; i <= len; i++){this.colDataList1.push({id: i + ''});
}
return this.colDataList1;
}else{return this.colDataList1;}
},
row1Change(){
// 每触发一次,清空数据
this.rowDataList1 = [{id: Math.ceil(Math.random()*100)}];
let len = this.row1;
if (len > 1){for (let i = 2; i <= len ; i++){this.rowDataList1.push({id: Math.ceil(Math.random()*100) + i});
}
return this.rowDataList1;
}else {return this.rowDataList1;}
},
handleClick(row, col, index) {// console.log(JSON.stringify(row));
// console.log(JSON.stringify(col));
// console.log("点击的 cell 行数:" + JSON.stringify(index)); // index 是 行数,0 表示第一行,从 0 开始
// 一点击获取 行纵坐标
this.colPos = col;
this.rowPos = index;
},
cellStyle({row, column, rowIndex, columnIndex}){// console.log(JSON.stringify(row))
// console.log(JSON.stringify(column))
// console.log("要渲染的行数:" + JSON.stringify(rowIndex))
// console.log(JSON.stringify(columnIndex))
if(rowIndex == 0 && columnIndex == 0){return '';}else {if(rowIndex == this.rowPos && columnIndex == this.colPos){ // 指定坐标
return 'background: pink';
}else{return '';}
}
},
}
});
</script>
</body>
</html>
为了方便大家直接使用理解,我这里使用的脚本等都是在线链接,确保大家直接 down 下来就能运行处效果的。
效果图
声明
原创手敲不易,转载请注明出处,谢谢 。我是拉丁小毛,欢迎大家关注我哦,一起交流,共同进步。有问题可以
邮我哦(util.you.com@gmail.com)