vue3 tab切换 动态组件

vue3 tab切换 动态组件

先看一张图
在这里插入图片描述

具体代码:

组件实例信息

如果你把组件实例放到Reactive Vue会给你一个警告:Component which was made a reactive object. This can lead to unnecessary performance overhead, and should be avoided by marking the component with markRaw or using shallowRef instead of ref.
Vue 收到一个组件,它被做成一个反应性对象。这可能会导致不必要的性能开销,应通过使用“markRaw”标记组件或使用“shallowRef”而不是“ref”来避免。

index.vue

<template><a-layout class="layout"><a-layout-content class="main-container"><div class="data-bar" :class="{ collapsed: collapsed }"><div class="data-bar-container"><div class="data-bar-icon-box"><img :src="logo" @click="handleBackDashboard" /></div><div class="data-bar-button" @click="handleBack"><LeftOutlined />返回上一页</div></div></div><a-affix offset-top="0"><div class="tab-bar"><div class="tabs"><template v-for="(tab, tabIndex) in tabs" :key="tabIndex"><divv-if="tab.show":class="'tab' + `${activeTab === tabIndex ? ' tab-active' : ''}`"@click="handleSwitchTab(tabIndex)">{{ tab.title }}</div></template></div></div></a-affix><div class="result-panel"><menu-unfold-outlinedv-if="collapsed"class="trigger"@click="() => (collapsed = !collapsed)"/><menu-fold-outlined v-else class="trigger" @click="() => (collapsed = !collapsed)" /><a-button size="small" type="danger" class="report-btn" @click="handleReport">结果报告</a-button><component :is="comId" :baseData="baseData" :collapsed="collapsed"></component></div></a-layout-content></a-layout>
</template><script lang="ts" setup>
import { markRaw, shallowRef, watch, onMounted, reactive, ref } from 'vue';
import { LeftOutlined, MenuUnfoldOutlined, MenuFoldOutlined } from '@ant-design/icons-vue';
import { useRouter } from 'vue-router';
import logo from '/@/assets/icons/logo.svg';import { useBarcode } from './hooks/useBarcode';
import { useTabs } from './hooks/useTabs';
import * as PhyloTreeApi from '/@/serve/api/phyloTree';const router = useRouter();
const query = JSON.parse(JSON.stringify(router.currentRoute.value.query));
for (let key in query) Object.assign(query, { [key]: String(query[key]) });const { taskId, barcodeId, sampleId, generation, barcodeName, primerList } = query;const baseData = reactive({barcodeId,taskId,sampleId,barcodeName,primerList: primerList.split(','),generation,
});const { activeTab, tabs, comId, handleSwitchTab } = useTabs(generation);const { barcodeConfig } = useBarcode(baseData);const collapsed = ref(true);const handleBack = () => {router.go(-1);
};const handleReport = () => {router.push(`/hiv/report?taskId=${taskId}&sampleId=${sampleId}&barcodeId=${barcodeId}&generation=${generation}&barcodeName=${barcodeName}`,);
};const handleBackDashboard = () => {router.push('/dashboard');
};</script><style lang="less" scoped>
@import '/@/assets/styles/views/result2.less';
</style>

useTabs.ts

import { reactive, ref, markRaw, shallowRef } from 'vue';import NanoStats from '../../nanoStats/index.vue';
import HtvHtml from '../../htvHtml/index.vue';
import ResultAnalyse from '../../resultAnalyse/index.vue';
import ResultTable from '../../resultTable/index.vue';
import SeqOverview from '../../seqOverview/index.vue';
import Medaka from '../../medaka/index.vue';
import MinTree from '../../minTree/index.vue';
import EvolveTree from '../../evolveTree/index.vue';export const useTabs = (generation: string) => {const tabs: Array<{ title: string; show: boolean; com: any }> = reactive([{title: '数据统计',show: generation == '5' ? true : false,com: markRaw(NanoStats),},{title: '分子溯源',show: generation == '6' ? true : false,com: markRaw(HtvHtml),},{title: '准种结果分析',show: generation == '5' ? true : false,com: markRaw(ResultAnalyse),},{title: '原始聚类结果表',show: generation == '5' ? true : false,com: markRaw(ResultTable),},{title: '多序列比对结果',show: generation == '5' ? true : false,com: markRaw(SeqOverview),},{title: '准种序列文本',show: generation == '5' ? true : false,com: markRaw(Medaka),},{title: '最小生成树',show: generation == '5' ? true : false,com: markRaw(MinTree),},{title: '进化树',show: generation == '5' ? true : false,com: markRaw(EvolveTree),},]);const activeTab = ref(0);const comId = shallowRef(NanoStats);if (generation == '5') {activeTab.value = 0;comId.value = NanoStats;} else if (generation == '6') {activeTab.value = 1;comId.value = HtvHtml;}const handleSwitchTab = (tabIndex: number) => {comId.value = tabs[tabIndex].com;activeTab.value = tabIndex;document.body.scrollTop = document.documentElement.scrollTop = 0;};return {activeTab,comId,tabs,handleSwitchTab,};
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/210568.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TIVA LaunchPad V3版本飞控代码阶段性更新日志20230820

TIVA LaunchPad V3版本飞控代码阶段性更新日志&#xff1a; 20230820主要更新如下 1、增加了2023年TI电子设计竞赛G题空地协同智能消防系统基础发挥部分&#xff0c;国一得奖标准复现学习训练方案 https://www.bilibili.com/video/BV17z4y1P7pf/ https://blog.csdn.net/u01…

技术细分|推荐系统——推荐系统中的数据去偏方法

本篇的主要脉络同样依据中科大何向南教授、合工大汪萌教授联合在 TKDE 上的一篇综述文章展开&#xff1a;Bias and Debias in Recommender System: A Survey and Future Directions。 下面按照前导文章中介绍的数据偏差 Selection Bias、Conformity Bias、Exposure Bias、Posit…

可视化NGINX管理平台Nginx Proxy Manager

# for CentOSyum install docker-compose -y# for Ubuntuapt-get install docker-compose -y 如果提示&#xff1a; 没有可用软件包 docker-compose&#xff0c; 错误&#xff1a;无须任何处理 通过 pip 安装 docker-compose # 添加企业版附加包 yum -y install epel-rel…

几款Java源码扫描工具(FindBugs、PMD、SonarQube、Fortify、WebInspect)

说明 有几个常用的Java源码扫描工具可以帮助您进行源代码分析和检查。以下是其中一些工具&#xff1a; FindBugs&#xff1a;FindBugs是一个静态分析工具&#xff0c;用于查找Java代码中的潜在缺陷和错误。它可以检测出空指针引用、资源未关闭、不良的代码实践等问题。FindBu…

Postman接口测试工具完整教程

前言 作为软件开发过程中一个非常重要的环节&#xff0c;软件测试越来越成为软件开发商和用户关注的焦点。完善的测试是软件质量的保证&#xff0c;因此软件测试就成了一项重要而艰巨的工作。要做好这项工作当然也绝非易事。 第一部分&#xff1a;基础篇 postman:4.5.1 1.安…

virtualbox 扩展磁盘后在win10 虚拟机看不到新扩展的空间

造成标题中问题的原因是&#xff0c;扩展的是win10.vdi 的空间&#xff0c;虚拟机使用使用的下边那个以uuid命名的空间&#xff0c;将这个磁盘的虚拟分配空间也调整到150G . 然后在win10的磁盘管理里就可以看到新加的空间了。之后再点相应的盘进行扩展卷操作即可。

python变量、常量、数据类型

一、变量 变量是存储在内存中的值&#xff0c;这就意味着在创建变量时会在内存中开辟一个空间。 基于变量的数据类型&#xff0c;解释器会分配指定内存&#xff0c;并决定什么数据可以被存储在内存中。 因此&#xff0c;变量可以指定不同的数据类型&#xff0c;这些变量可以…

Mapbox中点图层和面图层点击事件重叠,禁止点击穿透方案

使用mapbox的小伙伴们可能都遇到过这个问题,就是当地图上有两个图层,一个面图层一个点图层,二者相重合的时候。假设我们想点击点位弹窗展示一些内容,也想点击面图层的时候弹窗展示一些内容,这时候一个有意思的问题就产生了,就是点击点位弹窗的时候面图层对应的弹窗也会弹…

windows11下安装Tensor RT,并在conda虚拟环境下使用

建议仔细读一读NVIDIA官方出的安装教程&#xff0c;里面有windows、linux等安装教程&#xff0c;非常详细&#xff0c;这里再做一下简要总结。 TensorRT主要有三种安装模式、五种安装方式 毫无疑问&#xff0c;在windows系统中&#xff0c;我们只能选择zip安装。 安装tensorR…

轻松记录收支明细,一键打印,财务无忧!

作为现代人&#xff0c;管理好个人财务是非常重要的。但是&#xff0c;如何记录收支明细并打印出来呢&#xff1f;今天&#xff0c;我们向您推荐一款财务软件&#xff0c;帮助您轻松解决这个问题。 首先第一步&#xff0c;我们要打开【晨曦记账本】&#xff0c;并登录账号。 第…

Jmeter 分布式压测

为什么要分布式 jmeter是100%纯java开发的程序&#xff0c;虚拟用户是以线程实现的&#xff0c;在大量并发情况下&#xff0c;很容易出现CPU、内存消耗过大的问题&#xff0c;甚至会出现java内存溢出。一般一台电脑设置500-600线程数即可&#xff0c;如果超过1000线程&#xf…

词向量笔记

一、词向量的世界排名比赛MTEB MTEB: Massive Text Embedding Benchmark 二、词向量的维数 词向量的维数d1一般取20~500之间 三、向量索引SOTA 构建向量索引&#xff0c;就用这个吧&#xff1a;hnsw