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>

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

相关推荐
Brilliant Nemo19 分钟前
Vue2项目中使用videojs播放mp4视频
开发语言·前端·javascript
酷爱码44 分钟前
Linux实现临时RAM登录的方法汇总
linux·前端·javascript
LuckyLay1 小时前
Vue百日学习计划Day16-18天详细计划-Gemini版
前端·vue.js·学习
想要飞翔的pig1 小时前
uniapp+vue3页面滚动加载数据
前端·vue.js·uni-app
HarryHY1 小时前
git提交库常用词
前端
SoraLuna1 小时前
「Mac畅玩AIGC与多模态41」开发篇36 - 用 ArkTS 构建聚合搜索前端页面
前端·macos·aigc
Wannaer1 小时前
从 Vue3 回望 Vue2:性能优化内建化——从黑盒优化到可控编译
javascript·vue.js·性能优化
霸王蟹1 小时前
React Fiber 架构深度解析:时间切片与性能优化的核心引擎
前端·笔记·react.js·性能优化·架构·前端框架
benben0441 小时前
Unity3D仿星露谷物语开发44之收集农作物
前端·游戏·unity·游戏引擎
会功夫的李白1 小时前
uniapp自动构建pages.json的vite插件
前端·uni-app·vite