• Vue element table动态生成列


    • 需求

    前端页面使用的vue的element-ui。需要实现的需求如下图:用户页面选择起始运距和运距间隔后,服务器动态生成运距和对应的运输车数列表。  

    • 实现方法

     element  table组件的render-header函数属性。 这个函数是专门用作渲染表格的列表头的。用法如下:

      

      1.在data区定义header

    复制代码
    data{
      return{
        //动态列头header header:[] } }
    复制代码

      2.设置表格属性:render-header="labelHead",函数名 labelHead 可以自己起名。

      <el-table v-if="wideTable" v-loading="loading"  :data="checkLogList" :render-header="labelHead" :border="true">

       

      3.写render-header的回调函数。请忽略下面的注释,但是,返回值必须是要h('span',)这个格式的,关于这个函数的具体研究可以参考这里 https://segmentfault.com/a/1190000016364550,查看vue的官方文档

    复制代码
    labelHead(h,{column,index}){ //动态表头渲染
          //let l = column.label.length;
          //let f = 12; //每个字大小,其实是每个字的比例值,大概会比字体大小打差不多大
          //column.minWidth = f * l; //字大小乘个数即长度 ,注意不要加px像素,这里minWidth只是一个比例值,不是真正的长度
          //然后将列标题放在一个div块中,注意块的宽度一定要100%,否则表格显示不完全
          return h('span',{class:'table-head',style:{'100%'}},[column.label])
        }
    复制代码

        

        4.在你需要header的方法里把后台返回的数据填充到header里。

    复制代码
    methods: {
        /** 查询用户列表 */
        getList() {
          this.loading = true;
          listCheckLog(this.addDateMonth(this.queryParams, this.month)).then(response => {
              this.checkLogList = response.rows;
              // 在这里将后台返回的列表头数据直接放到之前定义好的header数组中
              this.header = this.checkLogList[0].header;
              this.total = response.total;
              this.loading = false;
            }
          );
        }
    }
    复制代码

       

       5.最关键的是在需要生成动态列的地方遍历header数组,生成列。同时在行内遍历与表头具有对应关系的另一个数据填充列表。在index相等的时候将数据填充到对应的列下

    复制代码
    <el-table-column :label="item" v-for="(item, index) in header" :key="item"  align="center">
              <template slot-scope="scope">
                  <span v-for="(item2,index2) in scope.row.transportNumByDistance" v-if="index2 == index"> {{ scope.row.transportNumByDistance[index2].transportNum }} </span>
               </template>
     </el-table-column>
    复制代码
    • 完成后的效果图

    •   结语

       因为不是纯粹做前端开发的,对于vue和element没有很深入的了解过,所以做这个功能的时候在网上找了很多的解决方案,但是都不尽如人意,不是贴一大堆代码就是,简简单单两句话。或者思路很复杂,没有运用到element提供的这个render-header函数。

      最后找了认识的大牛提供了下之前写过的代码,跟着改造了下,很容易就看懂并且成功了。所以,很多时候,解决方案还是需要仔细在官方文档中查找啊。

     转自:https://www.cnblogs.com/shm-1255/articles/12562817.html

  • 相关阅读:
    thinkphp在wamp 配置去掉url中index.php方法
    mysql新监语句需要前面加SET FOREIGN_KEY_CHECKS=0;
    ini_set的用法介绍
    SpringBoot项目启动报错:java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    我的分享:第八章: 用Redis轻松实现秒杀系统
    项目分享:第一章:个人电商项目
    SpringBoot框架:第二章:SpringBoot中static和templates二个目录下的页面和静态资源访问的三个常见问题
    我的分析:第八章:JAVA高级工程师知识点
    Springboot项目启动报org.springframework.beans.factory.UnsatisfiedDependencyException
    Disconnected from the target VM, address: '127.0.0.1:56577', transport: 'socket'
  • 原文地址:https://www.cnblogs.com/javalinux/p/15654534.html
Copyright © 2020-2023  润新知