【element-ui】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>

回答:

没查到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>

回答:

image.png
image.png

显示不了
为啥呢
@暑假作业

以上是 【element-ui】element-ui2 使用render渲染表格中列的内容 的全部内容, 来源链接: utcz.com/a/151930.html

回到顶部