element table 封装

先封装成组件,需要用到的页面直接引入

	<template>
		<el-table
              ref="sinoTableRef"
              v-bind="props.tableConfig.tableattributes"
              v-on="tableDefaultProps.tableEvent"
              height="100%"
              style="width: 100%"
              :border="true"
            >
              <component
                v-for="(item, index) in tableDefaultProps.tableColumnAttributes"
                :key="index"
                v-bind="item"
                :is="'ElTableColumn'"
              >
              </component>
              <slot name="customTableSlot"></slot>
         </el-table>
	</template>
<script setup>
import { computed, ref } from "vue";
const props = defineProps({
		  tableConfig: {
    		type: Object,
    		default: () => {
      			return {};
    		},
    		requird: false,
  		},
})
//这一步如果配置不需要默认值可以省略,直接用props.tableConfig
const tableDefaultProps = computed(() => {
  return Object.assign(
    {
      // 是否显示自定义table表格
      customTable: false,
      // 是否显示loading
      loading: false,
      /**
       * 详见element-plus  Table-column 配置
       * 所有下划线连接替换为驼峰模式 例:
       * column-key 替换为 columnKey
       * */
      tableColumnAttributes: [],
      /**
       * 详见element-plus  table attribute配置
       * 所有下划线连接替换为驼峰模式 例:
       * max-height 替换为 maxHeight
       * */
      tableattributes: {
        data: [],
      },
      /**
       * 详见element-plus table event配置
       *  驼峰替换下划线 例:
       * selection-change 替换为 selectionChange
       * */
      tableEvent: {},
    },
    props.tableConfig
  );
});
</script >

使用组件

<template>
	<customTable :tableConfig="tableDefaultProps ">
		 <!-- table表格自定义内容插槽 -->
   	<template #customTableSlot>
      <el-table-column label="自定义内容">
        <template #default="scope">
          {{ scope.row }}
        </template>
      </el-table-column>
    </template>
	</customTable>
</template>

<script setup>
import advancedSearchTpl from "customTable.vue";
const tableDefaultProps = reactive({
  loading: false,
  tableColumnAttributes: [
    {
      type: "index",
    },
    {
      prop: "date",
      label: "Date",
    },
    {
      prop: "name",
      label: "Name",
    },
    {
      prop: "address",
      label: "Address",
    },
  ],
  tableattributes: {
    data: [],
  },
  tableEvent: {
    onSelectionChange(val) {
      console.log(val);
    },
  },
});
</script >

小结:也可以使用render实现同样的功能, 具体实现可以点击查看

同理使用这种办法可以封装tree,form等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值