赞
踩
将表格二次封装,方便以后开发中的复用。每次只需调用表格组件后,在父组件中往子组件标签上写入dataSource(表格数据)和columns(表格列标题)即可。
此案例中最后一列是删除按钮,动态生成,在父组件中定义columns时用
slots: { customRender: "operation" } 来动态渲染。
在子组件的template标签中通过slot插槽来传值(每一行的值),在父组件中通过v-slot="slotProps"接收子组件传过来的值。
示例代码如下:
子组件MngTable.vue
- <template>
- <a-table :dataSource="dataSource" :columns="columns">
- <template #operation="{ record }">
- <slot :record="record"></slot>
- </template>
- </a-table>
- </template>
-
- <script lang="ts">
- import { defineComponent } from "vue";
-
- export default defineComponent({
- name: "MngTable",
- props: {
- dataSource: [],
- columns: [],
- },
- components: {},
- setup() {
- return {};
- },
- });
- </script>
-
- <style lang="scss" scoped></style>
父组件Parent.vue
- <template>
- <div class="section pitch_default p_default">
- <MngTable :dataSource="dataSource" :columns="columns">
- <template v-slot="slotProps">
- <a-button type="primary">删除</a-button>
- </template>
- </MngTable>
- </div>
- </template>
-
- <script lang="ts">
- import { defineComponent } from "vue";
- import { ManageTable } from "@/components";
-
- export default defineComponent({
- name: "Parent",
- components: {
- ManageTable,
- },
-
- setup() {
- const pagination = {
- total: 200,
- current: 1,
- pageSize: 10,
- };
-
- const columns = [
- {
- title: "name",
- dataIndex: "name",
- key: "name",
- },
- {
- title: "age",
- dataIndex: "age",
- key: "age",
- },
- {
- title: "operation",
- key: "operation",
- slots: { customRender: "operation" },
- },
- ];
-
- const dataSource = [
- {
- name: '胡彦斌',
- age: 32,
- },
- {
- name: '胡彦祖',
- age: 42,
- },
- ],
-
- return {
- dataSource,
- columns,
- pagination,
- };
- },
- });
- </script>
-
- <style lang="scss" scoped></style>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。