vue element table 传入自定义的table column item
后台管理vue cli项目,使用的是vue-admin-template,vue-elment模板
由于项目中需要大量使用el-table,所以想做一个table的组件,目前遇到一个渲染column的问题
就是表格的列显示的内容可能是自定义的html,所以需要用到template插槽,我通过div绑定v-html渲染html但是这个变量内无法接收elment的组件,并且渲染的class还需要穿透,比较麻烦。
于是我定义了一些默认的template,例如需要渲染el-tag,以及一些列可能是用户的头像,但是着三者之间好像有冲突。
请问有没有比较好的解决方案呢?
<el-table-column v-for="(item,index) in columns"
:key="index"
:label="item.label || ''"
:align="item.align || 'center'"
:prop="item.prop"
:width="item.width || 100"
:show-overflow-tooltip="item.showOverflowTooltip || true"
:class-name="item.class || ''"
:formatter="item.formatter"
>
<template v-if="item.avatar || false" v-slot="{ row }">
<el-avatar size="large" :src="assets + row[item.avatar]"></el-avatar>
</template>
<template v-if="item.tag || false" v-slot="{ row }">
<el-tag :size="item.tag(row).size || 'small'" :color="item.tag(row).color || ''">{{ item.tag(row).text }}</el-tag>
</template>
<template v-if="item.template || false" v-slot="{ row }">
<div v-html="item.template(row)"></div>
</template>
</el-table-column>
回答:
直接在columns里面手写render方法或者JSX
{ title: 'title',
prop: 'prop',
render (h, params) {
const { row, column, index } = params;
//自定义组件
return <customTemplate :row="row" :column="column" :index="index" ></customTemplate>
}
},
然后写一个把render方法转换成template-slot写法的functional组件,并且注册
export default { name: 'renderTemplate',
functional: true,
props: {
render: Function,
index: Number,
scope: Object
},
render: (h, ctx) => {
const { row, column } = ctx.props.scope
column.key = column.property
const index = ctx.props.scope.rowIndex
const params = { row, column, index }
return ctx.props.render(h, params)
}
}
//vue{
components:{renderTemplate}
}
<el-table-column v-for="col in columns" :key="col.prop"> <template
v-if="typeof col.render === 'function' && !col.type"
v-slot:default="scope"
>
<renderTemplate
:render="col.render"
:scope="scope"
:index="index"
/>
</template>
</el-table-column>
回答:
我在封装el-table的时候是用的插槽,在父组件里面写el-table-column,主要是封装分页表格。
以上是 vue element table 传入自定义的table column item 的全部内容, 来源链接: utcz.com/p/935552.html