最近做了一个功能,后端根据配置信息,动态返回一个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>