如何动态渲染elementUI table的行和列

如何动态渲染elementUI table的行和列

需求

近日项目中遇到这样一个需求:需要动态渲染一个列表的行和列,官网给出的例子大多是列写死的,行动态生成的,但是如何实现动态渲染行和列呢?后来我查询了一下实现了该功能,如下我将总结一下然后贴上代码。

实现

Talk is cheap,show me the code:

 <template>
  <div>
    <div class="retained">
      <el-card>
        <div class="dataList countFont">
          <div>
            <el-table
              border
              :data="dataList"
              style="width: 100%;">
              <el-table-column
                :show-overflow-tooltip="true"
                prop="data"
                width="180">
                <template slot-scope="scope" style="text-align: left">
                  <span>{
   {
   scope.row.data ? scope.row.data : '---'}}</span>
                </template>
              </el-table-column>
              <el-table-column
                sortable="custom"
                min-width="180"
                v-for="col in cols"
                :prop="col.prop" :label="col.label">
              </el-table-column>
            </el-table>
            <el-button @click="addCols">
              添加一列
            </el-button>
          </div>
        </div>
      </el-card>
    </div>
  </div>
</template>

<script>

  export default {
   
    data() {
   
      return {
   
        dataList: [
          {
   
            data: "2019-1-26",
            list0:1,
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您可以使用 ElementUI 的作用域插槽(Scoped Slot)来动态渲染表头的每一。具体实现步骤如下: 1. 在 `el-table-column` 标签中使用 `slot-scope` 属性来定义作用域插槽。 2. 在作用域插槽中使用 `header` 插槽来渲染表头内容,并通过 `props.column` 访问当前表头的信息。 例如,以下代码可以实现动态添加表头的功能: ``` <template> <el-table :data="tableData"> <el-table-column v-for="(column, index) in dynamicColumns" :key="index" :label="column.label" :prop="column.prop" :width="column.width" :sortable="column.sortable" :index="column.index" :formatter="column.formatter" :show-overflow-tooltip="column.showOverflowTooltip" :align="column.align" :header-align="column.headerAlign" :class-name="column.className" :label-class-name="column.labelClassName" :reserve-selection="column.reserveSelection" :fixed="column.fixed" :resizable="column.resizable" :column-key="column.columnKey" :filters="column.filters" :filter-placement="column.filterPlacement" :filter-multiple="column.filterMultiple" :filter-method="column.filterMethod" :filtered-value="column.filteredValue" :render-header="renderHeader(column)" ></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: 'John', age: 22, address: 'New York' }, { name: 'Jane', age: 23, address: 'London' }, { name: 'Bob', age: 25, address: 'Paris' } ], dynamicColumns: [ { label: 'Name', prop: 'name', width: '100px' }, { label: 'Age', prop: 'age', width: '100px' } ] } }, methods: { renderHeader(column) { if (column.prop === 'address') { return ( <div> { column.label } <el-button size="mini" type="text" icon="el-icon-plus" onClick={() => this.addColumn()}></el-button> </div> ) } else { return column.label } }, addColumn() { this.dynamicColumns.push({ label: 'Address', prop: 'address', width: '100px' }) } } } </script> ``` 在上述代码中,我们首先定义了一个 `dynamicColumns` 数组来存储动态添加的表头信息。然后,在 `el-table-column` 标签中使用 `render-header` 属性来渲染表头内容,通过 `renderHeader` 方法来判断是否需要添加按钮,并在按钮点击事件中动态添加表头。最后,我们通过 `v-for` 指令来动态渲染表格。 注意:这里使用了 JSX 语法,如果你不熟悉可以先学习一下。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值