el-card结合el-tabs实现带标签页的卡片

效果

使用方式

跟官网的el-tabs一样,只需要传入v-model和slots,就会自动生成导航

ini 复制代码
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
    <el-tab-pane label="User" name="first">User</el-tab-pane>
    <el-tab-pane label="Config" name="second">Config</el-tab-pane>
    <el-tab-pane label="Role" name="third">Role</el-tab-pane>
    <el-tab-pane label="Task" name="fourth">Task</el-tab-pane>
  </el-tabs>

只不过我们这里的my-card-tab是自定义的一个组件,其它功能和el-tabs一样,不过只实现了基础用法,什么删减标签页就没有做了,card组件是封装后的el-card

实现过程

my-card-tab组件可以放很多,但是在card组件里要如何知道放入了多少组件?从而生成导航呢?

看element-plus的源码似乎是用依赖注入来实现的,但是我看不懂源码,就尝试用依赖注入试试看

首先是my-card-tab组件,使用父组件注入的setTab,将当前组件的name传进去,这个name就是我们控制标签页切换的那个name

my-card-tab.vue 复制代码
<template>
  <div class="card-tab" v-show="currentValue === name">
    <slot></slot>
  </div>
</template>

<script lang="ts" setup>
import { inject } from 'vue'

const props = defineProps({
  name: String
})

const tabsRoot: any = inject('tabsRoot')

const { setTab, currentValue } = tabsRoot

setTab(props.name)
</script>

然后在card组件中,取出,放在数组中,然后页面上遍历

kotlin 复制代码
provide('tabsRoot', {
  currentValue,
  setTab
})

const nav: Ref<Array<string>> = ref([])

const setTab = (val: any) => {
  if (nav.value.includes(val)) return
  nav.value.push(val)
}
ini 复制代码
  <div
    v-for="(item, index) in nav"
    :class="[
      'card-header-nav',
      modelValue === (item as any) ? 'active' : ''
    ]"
    :key="index"
  >
    <span @click="clickNav(item as any)">{{ item as any }}</span>
  </div>

这样就可以了,剩下就是修改修改样式

相关推荐
SquabbyZhu18 分钟前
从 4 个 URL 到 1 个入口:Peaks-Loop 驱动的微前端聚合实践
前端
Hilaku27 分钟前
技术好就能升职是前端圈最大的谎言!
前端·javascript·程序员
lhldsg28 分钟前
树洞倾诉的核心需求与产品定位误区
java·前端·小程序
光影少年41 分钟前
react navite高频手写/实操题
前端·javascript·react native·react.js·前端框架
hunterandroid1 小时前
HarmonyOS 弱网与离线优先架构实战:请求队列、本地缓存与增量同步
前端·前端框架
lhldsg1 小时前
宠物同城领养平台开发实战:从需求分析到上线部署指南
java·前端·小程序·需求分析·宠物
hunterandroid1 小时前
Android 内存泄漏排查实战:从 LeakCanary 报警到根因定位
android·前端
leoZ2311 小时前
AI+前端提效-12 AI辅助前端性能优化与监控:从开发到线上全流程提效
前端·人工智能·神经网络·自然语言处理·性能优化·keras·知识图谱
阿图灵1 小时前
LangGraph 实战 03:Workflows 与 Agents——六种工作流模式与智能体实战(附 6 个可运行示例)
java·前端·javascript·工作流·ai agent·智能体·langgraph
狂炫冰美式1 小时前
电脑合盖之后 Cursor 还在偷我电?看看为啥
前端·人工智能·后端