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>

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

相关推荐
神奇的小猴程序员14 小时前
Mutantcat Web Pdf Reader —— 开源、轻量、安全的网页 PDF 阅读器
前端·pdf
三小河14 小时前
React Vite 中动态批量导入路由
前端·vue.js
Qinana14 小时前
📚 论如何用代码谈一场不露脸的恋爱
前端·前端框架·html
Forfun_tt14 小时前
xss-labs pass-10
java·前端·xss
T___T14 小时前
从 "送花被拒" 到 "修成正果":用 JS 揭秘恋爱全流程中的对象与代理魔法
前端·javascript
三小河14 小时前
从私服版本冲突到依赖治理:揭秘 resolutions 配置
前端·javascript·架构
Mapmost14 小时前
你的3DGS数据为何难以用在项目里?Web端开发实战指南
前端
举个栗子dhy14 小时前
第一章、React + TypeScript + Webpack项目构建
前端·javascript·react.js
大杯咖啡14 小时前
localStorage与sessionStorage的区别
前端·javascript
RaidenLiu14 小时前
告别陷阱:精通Flutter Signals的生命周期、高级API与调试之道
前端·flutter·前端框架