基于ant-design-vue二次封装的table怎么处理slot
项目中用到的ant-design-vue
版本是2.1.2版本.
基于vue3.x+typescript
想对a-table
组件进行二次封装.Xhtable.jsx
代码如下:
import { defineComponent } from "vue";
import PropTypes from "../../_utils/vue-types";
const XhTable = defineComponent({
name: "XhTable",
props: {
columns: PropTypes.array.def([]).isRequired,
dataSource: PropTypes.array.def([]).isRequired,
loading: PropTypes.bool.def(false),
},
setup() {},
render() {
const props = {
...this.$attrs,
...this.$props,
};
const slots = Object.keys(this.$slots).map((slot) => {
return <template slot={slot}>{this.$slots[slot]}</template>;
});
const table = (
<a-table {...{ ...props, scopedSlots: this.$slots }}>{slots}</a-table>
);
return <div>{table}</div>;
},
});
export default XhTable;
使用方法如下:
<template>
<div>
<XhTable
:dataSource="dataSource"
:columns="columns"
>
<template #customAddressTitle>
<span>紧急程度</span>
</template>
</XhTable>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
name: 'App',
setup() {
const columns: any = [
{
title: '姓名',
dataIndex: 'name',
key: 'name',
},
{
title: '年龄',
dataIndex: 'age',
key: 'age',
},
{
dataIndex: 'address',
key: 'address',
slots: {
title: 'customAddressTitle',
},
},
]
const dataSource = [
{
key: '1',
name: '胡彦斌',
age: 32,
address: '西湖区湖底公园1号',
},
{
key: '2',
name: '胡彦祖',
age: 42,
address: '西湖区湖底公园1号',
},
]
return {
dataSource,
columns,
}
},
})
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
我的问题是怎么去处理:
<template #customAddressTitle>
<span>紧急程度</span>
</template>
这种情况.
这种方式自定义表头对应的title
发现没作用.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
用
tsx
的语法好像不太能处理这种情况,当然可能是我自己太菜。后面改用.vue
的方式进行二次封装处理。简单代码如下: