Vue根据后端返回的tabList动态渲染组件信息

最近做了一个功能,后端根据配置信息,动态返回一个tabList,其中结构是List<Map<String,Object>> tabList; map里面的数据是 label、value 页面需要根据tablist动态渲染组件(不同的tab都使用了组件进行了封装)
实现效果
直接看代码
java 复制代码
<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 渲染不同的组件 -->  
      //我这里直接用的label的中文进行匹配 可以根据自己需要更改
      <component  
        :is="getComponentName(tab.label)"  
        :billId="billId"  
        v-if="activeModule === tab.label"  
      />  
    </a-tab-pane>  
  </a-tabs>  
</template>  
java 复制代码
<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(){
  	//1、从后端接口获取tabList
  	....
  	
  	//2、初始化默认激活tab为第一个
  	this.activeModule=this.tabList[0].label
  	},
    handleTabChange(key) {  
      // 处理标签页切换的逻辑  
      this.activeModule = key;  
    },  
    getComponentName(key) {  
      // 根据 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>
相关推荐
雨季66615 分钟前
Flutter 三端应用实战:OpenHarmony 简易“动态内边距调节器”交互模式深度解析
javascript·flutter·ui·交互·dart
天人合一peng29 分钟前
Unity中button 和toggle监听事件函数有无参数
前端·unity·游戏引擎
会飞的战斗鸡1 小时前
JS中的链表(含leetcode例题)
javascript·leetcode·链表
方也_arkling1 小时前
别名路径联想提示。@/统一文件路径的配置
前端·javascript
毕设源码-朱学姐1 小时前
【开题答辩全过程】以 基于web教师继续教育系统的设计与实现为例,包含答辩的问题和答案
前端
qq_177767371 小时前
React Native鸿蒙跨平台剧集管理应用实现,包含主应用组件、剧集列表、分类筛选、搜索排序等功能模块
javascript·react native·react.js·交互·harmonyos
qq_177767372 小时前
React Native鸿蒙跨平台自定义复选框组件,通过样式数组实现选中/未选中状态的样式切换,使用链式调用替代样式数组,实现状态驱动的样式变化
javascript·react native·react.js·架构·ecmascript·harmonyos·媒体
web打印社区2 小时前
web-print-pdf:突破浏览器限制,实现专业级Web静默打印
前端·javascript·vue.js·electron·html
RFCEO2 小时前
前端编程 课程十三、:CSS核心基础1:CSS选择器
前端·css·css基础选择器详细教程·css类选择器使用方法·css类选择器命名规范·css后代选择器·精准选中嵌套元素
烬头88212 小时前
React Native鸿蒙跨平台采用了函数式组件的形式,通过 props 接收分类数据,使用 TouchableOpacity实现了点击交互效果
javascript·react native·react.js·ecmascript·交互·harmonyos