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)