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:{width:'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>
復制代碼
  • 完成后的效果圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM