Таблица элементов интерфейса с динамическими столбцами - PullRequest
0 голосов
/ 20 февраля 2019

Я ищу пример использования табличного компонента Element UI без необходимости жесткого кодирования всех столбцов.На всех примерах, которые я видел, включая официальную таблицу элементов пользовательского интерфейса , показаны все столбцы, указанные в шаблоне.

Я пытаюсь сделать что-то подобное.В моем старом компоненте таблицы это дает мне все столбцы и мой дополнительный конечный столбец с кнопкой delete.

<template>
  <div v-if="tableData.length > 0">
    <b-table striped hover v-bind:items="tableData" :fields=" keys.concat(['actions']) ">
      <template slot="actions" slot-scope="row">
        <b-btn size="sm" @click.stop="tableClick(row.item)" class="mr-1">
          Delete
        </b-btn>
      </template>
    </b-table>
  </div>
</template>

В отличие от этого, во всех примерах таблицы пользовательского интерфейса элемента используются несколько повторяющихся тегов el-table-column.Из-за загрузки данных с разными столбцами во время выполнения я не могу использовать этот подход.

  <template>
    <el-table
      :data="tableData"
      style="width: 100%">
      <el-table-column
        prop="date"
        label="Date"
        width="180">
      </el-table-column>
      <el-table-column
        prop="name"
        label="Name"
        width="180">
      </el-table-column>
      <el-table-column
        prop="address"
        label="Address">
      </el-table-column>
    </el-table>
  </template>

Я новичок и изо всех сил пытаюсь понять, как достичь своей цели с помощью таблицы el.

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете иметь столбцы в виде массива объектов с необходимыми свойствами и перебирать их в шаблоне с помощью v-for:

<template>
    <el-table
          :data="tableData"
          style="width: 100%">
        <el-table-column v-for="column in columns" 
                         :key="column.label"
                         :prop="column.prop"
                         :label="column.label"
                         :formatter="column.formatter"
                         :min-width="column.minWidth">
        </el-table-column>
        <el-table-column fixed="right">
            <template slot-scope="scope">
              ... your delete button or whatever here...
            </template>
    </el-table-column>
    </el-table>
</template>

, а затем вы получите ваши столбцы откуда-то, они могут быть вданные для примера:

data() {
    return {
      columns: [
        {
          prop: 'date',
          label: 'Date',
          minWidth: 180px
        },
        {
          prop: 'name',
          label: 'Name',
          minWidth: 180px
        },
        {
          prop: 'address',
          label: 'Address',
          formatter: (row, col, cell, index) => this.addressFormatter(cell),  //example of a formatter
        },
      ],
    };
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...