最近做了一个功能,后端根据配置信息,动态返回一个tabList,其中结构是List<String,Object> tabList; map里面的数据是 label、value 页面需要根据tablist动态渲染组件(不同的tab都使用了组件进行了封装)
实现效果

直接看代码
<template> <a-tabs v-model:activeKey="activeModule" @change="handleTabChange" v-if="billId && tabList.length > 0"> <a-tab-pane v-for="(tab, index) in tabList" :key="tab.label" :tab="tab.label" > <!-- 使用动态组件来根据 tab.key 渲染不同的组件 --> <component :is="getComponentName(tab.label)" :billId="billId" v-if="activeModule === tab.label" /> </a-tab-pane> </a-tabs>
</template>
<script> import Invoice from './tabs/invoice'import BankReceipt from './tabs/bankReceipt'import Dispatch from './tabs/dispatch'import PurchaseOrder from './tabs/purchaseOrder'import ReceiptOrder from './tabs/receiptOrder'import RequestOrder from './tabs/requestOrder'import TrainApplication from './tabs/trainApplication'import TravelApplication from './tabs/travelApplication' export default { components: { Invoice,BankReceipt,Dispatch,PurchaseOrder,ReceiptOrder,RequestOrder,TrainApplication,TravelApplication}, data() { return { billId: null, tabList: [ { key: '0', label: '发票' }, { key: '1', label: '银行回单' }, ], activeModule: '发票', }; }, methods: { getTabList(){....this.activeModule=this.tabList[0].label},handleTabChange(key) { this.activeModule = key; }, getComponentName(key) { switch (key) { switch (key) {case '发票':return 'Invoice';case '银行回单':return 'BankReceipt';case '请款单':return 'RequestOrder';case '验收单':return 'ReceiptOrder';case '差旅申请':return 'TravelApplication';case '培训申请':return 'TrainApplication';case '公出派遣':return 'Dispatch';case '采购单':return 'PurchaseOrder';default: return 'DefaultComponent'; } }, },
};
</script>