在element-plus虚拟化表格中使用tsx和slot插槽自定义渲染单元格

在element-plus虚拟化表格中,根据官网描述,定义列的参数是这样的:

const columns = [
  {
    dataKey: 'id',
    key: 'id',
    title: 'ID',
    width: '100'
  },
  {
    dataKey: 'name',
    key: 'name',
    title: '姓名',
    width: '100'
  },
  {
    dataKey: 'age',
    key: 'age',
    title: '年龄',
    width: '100'
  },
]

使用cellRenderer可以自定义渲染列的内容,比如将姓名列渲染成按钮:

const columns = [
  {
    dataKey: 'id',
    key: 'id',
    title: 'ID',
    width: '100'
  },
  {
    dataKey: 'name',
    key: 'name',
    title: '姓名',
    width: '100',
//-----------------可以将cellData输出一下,观察内部的结构---------------------
    cellRenderer: (cellData: any) => (
      <el-button link type="primary" onClick={() => console.log(cellData)}>
        {cellData.rowData.name}
      </el-button>
    )
  },
  {
    dataKey: 'age',
    key: 'age',
    title: '年龄',
    width: '100'
  },
]

那么如何在上面的tsx中使用插槽,例如element-plus的el-popconfirm,el-popover等,或是我们自定义的组件。

以el-popconfirm为例,组件需要在内部嵌套一个元素,并使用#reference:

tsx中使用插槽,不支持直接嵌套,例如:

const columns = [
  {
    dataKey: 'id',
    key: 'id',
    title: 'ID',
    width: '100'
  },
  {
    dataKey: 'name',
    key: 'name',
    title: '姓名',
    width: '100',
    cellRenderer: (cellData: any) => {

//-----------------错误的写法---------------------------
        return(
          <ElPopconfirm
            title="是否确认删除此列?">

            <template v-slot="reference">
              <el-button>
                删除 {cellData.rowData.name}
              </el-button>
            </template>

          </ElPopconfirm>
        )
//------------------------------------------------------

  },
  {
    dataKey: 'age',
    key: 'age',
    title: '年龄',
    width: '100'
  },
]

在tsx中只允许扁平化地使用插槽(不使用插槽的元素可以正常嵌套),用法:

const columns = [
  {
    dataKey: 'id',
    key: 'id',
    title: 'ID',
    width: '100'
  },
  {
    dataKey: 'name',
    key: 'name',
    title: '姓名',
    width: '100',
    cellRenderer: (cellData: any) => {

//----------------------正确的写法---------------------------
      const slots = {
        reference: () => 
            <el-button link type="primary">
            删除 {cellData.rowData.name}
            </el-button>
      }
//----------------然后在下面通过v-slots使用-------------------
        return(
          <ElPopconfirm
            title="是否确认删除此列?"
            v-slots={slots}
          >
          </ElPopconfirm>
    )
  },
  {
    dataKey: 'age',
    key: 'age',
    title: '年龄',
    width: '100'
  },
]

今天来纠正一下上面的错误,tsx中插槽可以嵌套,如下:

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
在Vue 3使用TypeScript和JSX语法编写Ant Design的Table组件可以按照以下步骤进行: 1. 首先,确保你已经安装了Ant Design Vue和TypeScript依赖: ```bash npm install ant-design-vue npm install --save-dev @types/ant-design-vue ``` 2. 在你的Vue组件引入Table组件和相关的类型定义: ```tsx import { defineComponent } from 'vue'; import { Table } from 'ant-design-vue'; export default defineComponent({ components: { Table }, // ... }); ``` 3. 在Vue组件的template使用Table组件,并使用JSX语法编写插槽内容: ```tsx <template> <Table :columns="columns" :dataSource="data"> <template #name="{ text }"> <strong>{{ text }}</strong> </template> </Table> </template> ``` 在上述示例,我们使用了`#name`插槽,它会渲染表格`name`列的内容。通过`{ text }`参数,我们可以获取到每一行的数据,并在插槽使用。 4. 在Vue组件的`data`选项定义表格的列和数据源: ```tsx export default defineComponent({ // ... data() { return { columns: [ { title: 'Name', dataIndex: 'name', key: 'name', }, // ... ], data: [ { key: '1', name: 'John Doe', }, // ... ], }; }, }); ``` 在上述示例,我们定义了一个`columns`数组来描述表格的列,每个列都有`title`、`dataIndex`和`key`属性。我们也定义了一个`data`数组,来表示表格的数据源。 这样,你就可以在Vue 3的TSX语法使用Ant Design的Table组件,并使用插槽自定义表格的内容了。记得在组件引入样式文件,以正确渲染Ant Design的样式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值