当前位置:网站首页 > Vue.js开发 > 正文

vue3中,当前页中封装tab切换模块

vue3中,当前页中封装tab切换模块

效果

在这里插入图片描述

代码
1、主页面

index.vue

<template> <div class="main-content"> <ChangeCurBtn :btn-data-source="btnDataSource" class="changeCurBtn" :cur-page="curPage" @click-page="handleCurPage" /> <div v-show="curPage == 'baseInfo'">baseInfo</div> <div v-show="curPage == 'otherUnit'">otherUnit</div> <div v-show="curPage == 'persInfo'">persInfo</div> <div v-show="curPage == 'labInfo'">labInfo</div> <div v-show="curPage == 'scientificTeam'">scientificTeam</div> <div v-show="curPage == 'appendix'">appendix</div> </div> </template> <script setup> import ChangeCurBtn from '@/views/components/changeCurTab.vue' const btnDataSource = ref([ { key: 'baseInfo', type: '', label: '基本信息', }, { key: 'otherUnit', type: '', label: '其他参与单位信息', }, { key: 'persInfo', type: '', label: '人员基本情况', }, { key: 'labInfo', type: '', label: '实验室信息', }, { key: 'scientificTeam', type: '', label: '科研攻关团队信息', }, { key: 'appendix', type: '', label: '附件上传', }, ]) const curPage = ref('baseInfo') const handleCurPage = (params) => { curPage.value = params } </script> <style lang="scss" scoped> @import url('../style/main.scss'); .changeCurBtn { margin-bottom: 40px; } </style> 
2、样式文件

src\app\science\views\style\main.scss

.main-content{ 
    color: red; } 
3、组件文件

src\app\science\views\components\changeCurTab.vue

<template> <div class="item-content"> <el-button v-for="item in dataSource" :key="item.key" :class="curBtn === item.key ? 'cur-btn' : ''" :type="item.type" @click="handleClick(item.key)" > { 
  { item.label }} </el-button> </div> </template> <script> export default defineComponent({ name: 'ChangeCurTab', props: { curPage: { require: true, type: String, default: 'baseInfo', }, btnDataSource: { require: true, type: Array, default: () => [], }, }, emits: ['clickPage'], setup(props, { emit }) { const { btnDataSource, curPage } = toRefs(props) const state = reactive({ curBtn: curPage, dataSource: btnDataSource, }) const handleClick = (params) => { // state.curBtn = params emit('clickPage', params) state.dataSource.map((item) => { if (item.key === params) { item = { ...item, type: 'primary' } } else { item = { ...item, type: '' } } return item }) } return { ...toRefs(state), handleClick, } }, }) </script> <style lang="scss" scoped> .item-content { width: 80%; display: flex; flex-flow: row nowrap; justify-content: flex-start; .cur-btn { color: #00a797; background: #e6f6f5; border-color: #b3e5e0; } } </style> 
到此这篇vue3中,当前页中封装tab切换模块的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • vue3中,js-cookie的使用 & token之获取token-getToken()、存储token-setToken()、移除token-removeToken()2024-11-27 23:54:07
  • vue2中,data为什么是函数2024-11-27 23:54:07
  • vue混入实例2024-11-27 23:54:07
  • js中,数组对象操作——双层遍历-for循环之splice-删除、push-添加 & 数组中添加对象 & 删除数组中对象 & 数组中对象的参数值置空2024-11-27 23:54:07
  • vue2中,html2canvas组件的使用——实现截图并保存到本地2024-11-27 23:54:07
  • vue3中,封装el-tree树形控件组件,用于组织架构——defineEmits、defineProps& vue3之computed计算属性、watch和nextTick监听的写法 & `${写法2024-11-27 23:54:07
  • vue3中,封装el-select选择器组件(二)——filterable模糊搜索、watch用法、nextTick用法、toRefs用法、sessionStorage取值、设置基准地址apiUrl2024-11-27 23:54:07
  • vue3中,封装el-select选择器组件(一)——表单四等分布局、查询、重置resetFields、el-date-picker起止日期、特殊字符校验、自定义指令v-throttle用于按钮防抖2024-11-27 23:54:07
  • vue3封装表单组件(三)02封装el-dialog组件的传值-select选择框、input输入框之查询、重置的使用 & vue3中父子传值的使用步骤2024-11-27 23:54:07
  • vue3封装表单组件(三)01封装el-dialog组件的传值-radio单选框、form表单之defineEmits、defineProps的使用2024-11-27 23:54:07
  • 全屏图片