1. 程式人生 > 程式設計 >vue實現動態表格提交引數動態生成控制元件的操作

vue實現動態表格提交引數動態生成控制元件的操作

上面要求做一個根據後臺資料動態生成控制元件,然後讓使用者輸入提交查詢資訊,然後動態生成表格在顯示出來。動態控制元件程式碼如下

<el-form
    :model="formData"
    style="padding: 0 5px;">
    <div v-if="tableshow">
    <div v-for="(item,i) in control" :key="i" style="padding-left:10px; float:left" >
     <el-form-item
     v-if="item.type=='input'"
     :key="item.name"
     :prop="item.name"
     label-width="100px">
     <label slot="label">{{ item.cnname }}:</label>
     <el-input v-model="item.value" size="mini" style="width: 100px; padding-right: 5px;"/>
     </el-form-item>
     <el-form-item
     v-if="item.type=='time'"
     :key="item.name"
     :prop="item.name"
     label-width="100px">
     <label slot="label">{{ item.cnname }}:</label>
     <el-date-picker
      v-model="item.value"
      value-format="yyyy-MM-dd HH:mm:ss"
      type="date"
      placeholder="選擇日期"/>
     </el-form-item>
    </div>
    <div style="padding-left:10px; float:left">
     <el-form-item prop="name" style="width: 20px; margin-bottom: 0px;">
     <el-button class="filter-item" type="primary" icon="el-icon-search" size="mini" @click="cmdsearch">
      {{ $t('table.search') }}
     </el-button>
     </el-form-item>
    </div>
    </div>
   </el-form>

data格式如下

 control: [{
  name: 'input1',cnname: '輸入框1',type: 'input',value: '這裡'
  },{
  name: 'time1',cnname: '時間範圍',type: 'time',value: null
  }]

還要監聽所有控制元件變化

 computed: {
 // 監聽所有控制元件變化
 formData: function() {
  var formData = {}
  this.control.forEach((item) => {
  formData[item.name] = item.value
  })
  return formData
 }
 }

動態表格如下

<el-table
    v-if="tableshow"
    id="exportTab"
    ref="multipleTable"
    :data="tables"
    border="true"
    tooltip-effect="dark"
    style="width: 100%;"
    @selection-change="selectArInfo">
    <el-table-column fixed="left" label="序號" width="62px" type="index"/>
    <template v-for="(col) in tableData">
    <el-table-column
     :show-overflow-tooltip="true"
     :formatter="fmtLength"
     :prop="col.dataItem"
     :label="col.dataName"
     :key="col.dataItem"
     resizable="true"
     width="120px"/>
    </template>
   </el-table>

需要兩個陣列,一個儲存表格列名,一個儲存表格資料

 tables: [],tableData: [dataItem: xxx,dataName: xxx],//儲存表格列名

補充知識:vue table表格的使用(動態資料展示)

第一種方式

 <el-table :data="tableDataalllist" border style="width: 100%" @sort-change="totalusercount">
  <el-table-column :label="head" :prop="head" v-for="(head,index) in header" :key="head" :sortable="定義自定義排序項">
  <template slot-scope="scope">
  {{tableDataalllist[scope.$index][index]}} // 當前行資料 接收兩個引數scope.$index; scope.row
  <template>
  <el-table-column>
 <el-table>
<script>
 export default{
  data(){
   return{
   // 資料結構
    tableDataalllist:[{
     1,'張三','23'
    },{
     2,'李四','15'
    },{
     3,'王五','18'
    }],header:['id','name','age']
   } 
  },methods:{
  // 接受一個obj引數
   totalusercount(obj){
    console.log(obj.prop) // 排序規則
    console.log(obj.order) // 排序方式
   }
  }
 }
</script>
id name age
1 張三 23
2 李四 15
3 王五 18

第二種方式(動態進行列的新增)

<el-table :data="gameareatable" v-loading="cardBuyConsumeDataLoading" v-if="gameareatable.length> 0">
 <el-table-column align="center" v-for="(item,index) in activePlayerDataPropLabelArray" :prop="item.prop" :label="item.label"
  :key="item.prop">
  <template slot-scope="scope">
  {{scope.row[item.prop]?scope.row[item.prop]:'暫無資料'}}
  </template>
 </el-table-column>
 </el-table>

export default {
 data(){
  return{
  // 資料結構 activePlayerDataPropLabelArray為label標籤顯示label表示當前列th的顯示的值,prop表示當前'日期'列下顯示date資料,'鬥地主'列下顯示prop為12的資料,'麻將'列下顯示prop為15的資料,activePlayerDataPropLabelArray:[{
    label:'日期',prop:'date'
   },{
    label:"鬥地主",prop:"12"
   },{
    label:'麻將',prop:'15'
   }],gameareatable:[{
    date:"2018-09-10",12:'老k',15:'一萬'
   },{
    date:"2018-08-01",12:'炸彈',15:'一條' 
   },{
    date:"2018-08-02",12:'對子',15:'五筒' 
   }]
  }
 }
}
日期 鬥地主 麻將
2018-09-10 老k 一萬
2018-08-01 炸彈 一條
2018-08-02 對子 一萬

以上這篇vue實現動態表格提交引數動態生成控制元件的操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。