VueパッケージelementUIテーブルコンポーネント動的列

 

現在、列は動的に表示されることが要件です。単純な列であれば、簡単に実行できます。直接ループされます。各列の形式が異なることが要件です。一部の列はテキストであり、一部の列はテキストです。は入力ボックスで、一部は計算ボックスです。

具体的な要件は次の図のとおりです。可能な場合はコメントと説明を入力してください

コードに直接:TreeTableNew.vue

<template>
  <div>
    <el-table :data="opt.data" style="width: 100%" :row-key="opt.key" border>
      <template v-for="(column, index) in opt.columns">
        <el-table-column :prop="column.key" :key="column.key" :label="column.label">
          <template slot-scope="scope">
           
            <el-input-number
              v-if="column.showFlag.isnumber"
              v-model="scope.row.inputNum"
              controls-position="right"
              :min="1"
            ></el-input-number>

            <el-input v-else-if="column.showFlag.isinput" v-model="scope.row[column.key]"/>
            
            <span v-else>{
   
   {scope.row[column.key]}}</span>

          </template>
        </el-table-column>

      </template>
    </el-table>
  </div>
</template>
<script>
export default {
  props: {
    opt: {
      type: Object
    }
  },
  data() {
    return {};
  },
  methods: {}
};
</script>

メインコードの説明:

サイクルデータ:

   opt.dataは、循環列のデータであり、通常の使用と同じです(通常の固定列を使用する必要があります)。これは、次の行と4列の値です(コード: '1#')。 、調整: '50'

 ループ列のプロパティ:

    forループを使用して列を動的に展開すると、列の属性がopt.columnsにカプセル化されます。opt.dataとopt.columnsの関係を明確に確認できます。opt.columnsには、opt.dataの5つの値に対応する5つの属性キーがあります。

   <template v-for = "(column、index)in opt.columns">
        <el-table-column:prop = "column.key":key = "column.key":label = "column.label">

列タイプの判断:

これは主opt.columnsのshowFlagによって判断さ、必要に応じて作成できます

 

この場合、メインのデータ構造がバックグラウンドで返され、フォアグラウンドを移動せずに動的な列拡張を実現できます。

コンポーネントの親ページを使用します。

<TreeTableNew:opt = "opt"> </ TreeTableNew>

データ領域:

   opt: {
        data:[
          {
            code:'1#',
            // basic:'50',
            //  choice:'10',
            adjust:'50',
            target:'4848',
            actual:'5000',
          },
          {
            code:'2#',
            // basic:'40',
            //choice:'10',
            adjust:'40',
            target:'4000',
            actual:'4010',
          },
          {
            code:'3#',
            adjust:'50',
            target:'5000',
            actual:'5010',
          }
        ],
        columns: [
          {
            key: 'code',
            label: '站',
            showFlag:{
              isnumber:false,
              isinput:false,
            },
          },
          {
            key: 'adjust',
            label: '调整',
           showFlag:{
              isnumber:true,
              isinput:false,
            },
          },
          {
            key: 'target',
            label: '目标',
           showFlag:{
              isnumber:false,
              isinput:true,
            },

          },
          {
            key: 'actual',
            label: '实际',
           showFlag:{
              isnumber:false,
              isinput:true,
            },

          }
        ],
        key: "id",

      },

 

おすすめ

転載: blog.csdn.net/CarryBest/article/details/89317196