vue element table 传入自定义的table column item

发布于 2022-09-13 00:16:30 字数 1568 浏览 28 评论 0

后台管理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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

关于从前 2022-09-20 00:16:30

直接在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>
樱&纷飞 2022-09-20 00:16:30

我在封装el-table的时候是用的插槽,在父组件里面写el-table-column,主要是封装分页表格。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文