element-ui2 使用render渲染表格中列的内容

想根据data中tableKey的值动态自定义渲染表格中列的内容, 不同的列生成不同的内容, 包含不同的HTML标签 , 不知道怎么弄,例如下面怎么使表格中的性别值从1,0替换成中文汉字的男女, 并加上标签el-tag, 代码如下:

    <div id="app">
      <el-table :data="items" border>
            <el-table-column v-for="(item,key) in tableKey"                   
                     :key="key"
                     :prop="item.value"
                     :label="item.label" v-if="!item.tp">
                     </el-table-column>
      <el-table-column :key="key" :prop="item.value"  :label="item.label" v-else>
              <template slot-scope="scope" :render="item.render(scope.row)">

              </template>
      </el-table-column>
      </el-table>
    </div>
 <script>
     new Vue({
              el: "#app",
              data:{
                     items: [{ name: "steven", age: 36, sex: 1},
                                        {name: "xixi", age: 5, sex: 0}
                                        ],
                     visible : false,
                     value1: '',
                     tableKey: [
                               { label: "名字", value: "name", tp: false },
                               { label: "年龄", value: "age", tp: false },
                               { label: "性别", value: "sex", tp: true,
                                  render: (h, parms) => {
                                      return h('el-tag', {
                                              props: {
                                                      type: 'success',
                                                      size: 'mini',
                                              },
                                   }, parms.row.status === 1 ? '男' : '女')
                                },
                             },
                      ],
             },
                        
                        
   })
 </script>
阅读 12.5k
4 个回答

没查到template有render这个属性,这个渲染函数应该不能直接在模板中使用吧
如果是不同的列显示不同的内容的话,可以使用动态组件

<el-table-column :key="key" :prop="item.value"  :label="item.label" v-else>
    <template slot-scope="scope">
        <component :is="item.component" :row="scope.row"></component>
    </template>
</el-table-column>
...
data: {
    return {
         tableKey: [
             { label: "名字", value: "name", tp: false },
             { label: "年龄", value: "age", tp: false },
             { label: "性别", value: "sex", tp: true, component: "tagElem"}
         ]
    }
},
components: {
    "tagElem": {
         template: "<el-tag type='success' size='mini'>{{row.sex === 1 ? '男':'女'}}</el-tag>",
         props: {row:{type: Object, required: true}}
    }
}

实现效果:
clipboard.png

效果类似于以下这样, 根据tableKey中的值渲染列中内容,可以html标签, 如select, tag等:
图片描述

文档中不是说了方法么

自定义列的显示内容,可组合其他组件使用。 通过 Scoped slot 可以获取到 row, column, $index 和 store(table 内部的状态管理)的数据,用法参考 demo。

<template>
  <el-table
    :data="tableData"
    style="width: 100%">
    <el-table-column
      label="日期"
      width="180">
      <template slot-scope="scope">
        <i class="el-icon-time"></i>
        <span style="margin-left: 10px">{{ scope.row.date }}</span>
      </template>
    </el-table-column>
    <el-table-column
      label="姓名"
      width="180">
      <template slot-scope="scope">
        <el-popover trigger="hover" placement="top">
          <p>姓名: {{ scope.row.name }}</p>
          <p>住址: {{ scope.row.address }}</p>
          <div slot="reference" class="name-wrapper">
            <el-tag size="medium">{{ scope.row.name }}</el-tag>
          </div>
        </el-popover>
      </template>
    </el-table-column>
    <el-table-column label="操作">
      <template slot-scope="scope">
        <el-button
          size="mini"
          @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
        <el-button
          size="mini"
          type="danger"
          @click="handleDelete(scope.$index, scope.row)">删除</el-button>
      </template>
    </el-table-column>
  </el-table>
</template>

<script>
  export default {
    data() {
      return {
        tableData: [{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1517 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1519 弄'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1516 弄'
        }]
      }
    },
    methods: {
      handleEdit(index, row) {
        console.log(index, row);
      },
      handleDelete(index, row) {
        console.log(index, row);
      }
    }
  }
</script>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题