vue3 ant design table中插槽使用

一、CustomRender写法

在这里插入图片描述

const columns: any[] = [
	{
    title: "是否启用",
    dataIndex: "itemStatus",
    customRender: (text, record, index) => {
      return text.text == 1 ? "否" : "是"
    }
  },
]
1、vue2x+antd1x
<template>
	<a-table :columns="columns" :dataSource="dataSource" :pagination="false" ></a-table>
</template>

<script>
export default {
	data() {
		return {
			dataSource: [],
			 columns:[
	          {
	            title: 'Date Sent',
	            dataIndex: 'paymentDate',
	            key: 'paymentDate',
	            align: 'center',
	            customRender: (text,record) => {
	              if (record.status == 2) {
	                  return <span style="color:red">{ text }</span>;
	                }else{
	                  return text
	                }
	            },
	          },
	          {
	            title: 'Sender Account Name',
	            key: 'accountName',
	            dataIndex: 'accountName',
	            align: 'center',
	          },
          ]
		}
	}
}
</script>
2、vue3x+antd3x+js
<template>
<div>{{num}}</div>
  <a-table
    class="ant-table-striped"
    size="middle"
    :columns="columns"
    :data-source="data"
    :row-class-name="(_record, index) => (index % 2 === 1 ? 'table-striped' : null)"
  />
</template>
<script>
import { defineComponent, ref } from 'vue'
const columns = [
  {
    title: 'Name',
    dataIndex: 'name',
    customRender: function ({ text }) {
      return <span style="color: red;cursor: pointer;" onClick={changeNum}>{text}</span>
    }
  }, {
    title: 'Age',
    dataIndex: 'age'
  }, {
    title: 'Address',
    dataIndex: 'address'
  }
]
const num = ref(0)
const changeNum = () => {
  num.value++
}
const data = [{
  key: '1',
  name: 'John Brown',
  age: 32,
  address: 'New York No. 1 Lake Park'
}, {
  key: '2',
  name: 'Jim Green',
  age: 42,
  address: 'London No. 1 Lake Park'
}, {
  key: '3',
  name: 'Joe Black',
  age: 32,
  address: 'Sidney No. 1 Lake Park'
}, {
  key: '4',
  name: 'Ben Kang',
  age: 15,
  address: 'Sidney No. 1 Lake Park'
}]
export default defineComponent({
  setup () {
    return {
      data,
      columns,
      num,
      changeNum
    }
  }

})
</script>
3、vue3x+antd3x+ts
<template>
  <div>{{num}}</div>
  <a-table
    class="ant-table-striped"
    size="middle"
    :columns="columns"
    :data-source="data"
    :row-class-name="(_record, index) => (index % 2 === 1 ? 'table-striped' : null)"
  />
</template>
<script lang="ts">
import { ref, defineComponent, h, VNode } from 'vue'

const columns = [
  {
    title: 'Name',
    dataIndex: 'name',
    customRender: ({ text }) => {
      return h("div", [
			record.name == "John Brown"
				? h("div", { style: { color: "#0f0" } }, text )
				: h(
						"div",
						{
							style: {
								color: "pink",
								cursor: "pointer",
							},
							onClick: () => console.log("111"),
						},
						"美丽"
				  ),
			h( "span", "待定" ),
		]);
  },
  { title: 'Age', dataIndex: 'age' },
  { title: 'Address', dataIndex: 'address' }
]
const num = ref(0)
const changeNum = () => {
  num.value++
}

const data = [
  {
    key: '1',
    name: 'John Brown',
    age: 32,
    address: 'New York No. 1 Lake Park'
  },
  {
    key: '2',
    name: 'Jim Green',
    age: 42,
    address: 'London No. 1 Lake Park'
  },
  {
    key: '3',
    name: 'Joe Black',
    age: 32,
    address: 'Sidney No. 1 Lake Park'
  },
  {
    key: '4',
    name: 'Ben Kang',
    age: 15,
    address: 'Sidney No. 1 Lake Park'
  }
]

export default defineComponent({
  setup () {
    return {
      data,
      columns,
      num,
      changeNum
    }
  }
})
</script>


二、插槽写法

在这里插入图片描述

<template #bodyCell="{ column, record }">
        <template v-if="column.dataIndex == 'itemStatus'">
          <a-switch :checked="record.itemStatus"
                :checked-value="1"
                :unchecked-value="0"/>
        </template>
</template>

在这里插入图片描述

<template #bodyCell="{ column, record }">
        <template v-if="column.dataIndex == 'itemStatus'">
          <a-tag v-if="record.itemStatus == 1" color="red">启用</a-tag>
          <a-tag v-else color="green">禁用</a-tag>
        </template>
</template>

三、数据处理(只针对翻译)

listTable.value.forEach(e => {
    e.itemStatus =e.itemStatus == 1 ? '是' : '否';
});

注意: 编辑后记得刷新,建议使用前两种方法,嘿嘿~

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3使用TypeScript和JSX语法编写Ant DesignTable组件可以按照以下步骤进行: 1. 首先,确保你已经安装了Ant Design VueTypeScript依赖: ```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 DesignTable组件,并使用插槽来自定义表格的内容了。记得在组件引入样式文件,以正确渲染Ant Design的样式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值