Uniapp+Vue3 使用父传子方法实现自定义tabBar

一、流程介绍

代码编写顺序

  • 第一步:pages.json配置tabbar并配置custom配置项
  • 第二步:编写自定义tabbar组件的静态代码(最好使用v-for去写,仿照原生tabbar逻辑)
  • 第三步:各tabbar页面调用tabbar组件,并传入tabbar索引值
  • 第四步:tabbar组件接受传入的值,通过传入索引值判断高亮对象,点击另外的tabbar图标时跳转到相应页面

页面执行顺序

  • 第一步:跳转到新的tabbar页面,该组件中的数据重置
  • 第二步:tabbar页面向组件传入索引并保存在currentIndex中
  • 第三步:v-show判断相应tabbar图标高亮
  • 第四步:点击新的tabbar,执行handleItemClick操作,跳转到新的tabbar页面(回到第一步)

二、代码

在page.json中定义tabbar

在page.json中定义tabbar并将custom设置为true

启用自定义tabbar的配置,可以将默认的tabbar隐藏

仍然使用uniapp默认的tabbar定义方式是为了防止跳转过程中页面栈无限增长

// 用户操作路径: 学习页 → navigateTo 情绪页 → navigateTo 研友页 // 页面栈:[学习, 情绪, 研友] ← 越来越长! // 用户连续点击tab 10次: // 页面栈会有10个页面!内存占用高,容易崩溃 
在这里插入图片描述

创建自定义tabbar组件

创建一个tabBarList数组(与page.json中tabBar中的list相同的结构),然后使用v-for去写更好。
本案例中选中状态是为图标加上高亮色块,且各个tabbar图标宽高都不相同,所以并没有采用这种写法

<scriptsetup>import{ref}from"vue"const tabBarList =ref([{"pagePath":"pages/study/study","text":"学习"},{"pagePath":"pages/mood/mood","text":"情绪"},{"pagePath":"pages/friend/friend","text":"研友"},{"pagePath":"pages/AI/AI","text":"芯研"},{"pagePath":"pages/my/my","text":"我的"}])</script><template><viewclass="container"><viewclass="item"@click="handleItemClick(0)"><imagesrc="@/static/tabBar/学习.png"style="width: 62rpx;height: 52rpx;z-index:9999;"/><view>学习</view><viewclass="circle"></view></view> ... </view></template><stylelang="scss"scoped>.container{width:100%;position:fixed !important;bottom: 0rpx;display:flex;justify-content: space-evenly;padding-bottom:40rpx;padding-top:20rpx;background-color: white;z-index: 99999;.item{display:flex;flex-direction: column;gap:10rpx;align-items: center;width: 50rpx;font-size: 19rpx;font-weight: 500;position:relative;.circle{position:absolute;top:-10rpx;left:10rpx;width: 50rpx;height: 50rpx;background:rgba(255, 219, 217, 0.54);border-radius: 50%;}}}</style>

在tabbar页面中使用组件

在tabbar页面中使用组件,并传入页面索引

在这里插入图片描述


在这里插入图片描述

接受传入数据以及选中后高亮、跳转

<scriptsetup>import{ref}from"vue"const props =defineProps({currentIndex:Number }) 跳转相应的tabbar页面 consthandleItemClick=(index)=>{ uni.switchTab({url:'/'+ tabBarList.value[index].pagePath })}const tabBarList =...])</script><template><viewclass="container"><viewclass="item"@click="handleItemClick(0)"><imagesrc="@/static/tabBar/学习.png"style="width: 62rpx;height: 52rpx;z-index:9999;"/><view>学习</view> 展示高亮色块 <viewclass="circle"v-show="props.currentIndex === 0"></view></view> ... </view></template>

Read more

飞算JavaAI:开启 Java 开发 “人机协作” 新纪元

飞算JavaAI:开启 Java 开发 “人机协作” 新纪元

每日一句 明天是新的一天, 你也不再是昨天的你。 目录 * 每日一句 * 一、需求到架构:AI深度介入开发“源头设计” * 1.1 需求结构化:自然语言到技术要素的精准转化 * 1.2 架构方案生成:基于最佳实践的动态适配 * 二、编码全流程:从“手动编码”到“人机协同创作” * 2.1 复杂业务逻辑生成:以“多级缓存架构”为例 * 2.2 代码质量保障:自动融入“防御式编程”逻辑 * 三、老系统重构:从“风险重重”到“精准可控” * 3.1 代码复杂度分析:自动识别“代码坏味道” * 3.2 增量重构:以“

Trae IDE 终极指南:从入门到精通,释放你的 AI 编程潜力(上)

Trae IDE 终极指南:从入门到精通,释放你的 AI 编程潜力(上)

💡 就像选择手机一样:iPhone 简洁易用,Android 功能丰富。Trae 和 Cursor 也是如此——一个是"开箱即用的 iPhone",一个是"高度定制的 Android"。本文将帮你找到最适合自己的 AI 编程助手! 在当今的软件开发领域,AI 编程助手已成为提升效率、激发创意的关键工具。而 Trae IDE 作为一款为开发者量身打造的智能开发环境,其强大的模型管理功能,更是让它在众多工具中脱颖而出。无论你是想快速上手,还是希望深度定制,Trae 都能满足你的需求。 本文将作为你的终极向导,带你深入探索 Trae IDE 的模型世界,从轻松切换内置模型,到添加和管理你自己的专属模型,助你将 Trae 的能力发挥到极致。 📑 文章目录 第一部分:基础入门 🎯 1.

国内主流AI工具对比 - 豆包、元宝、千问、Kimi、DeepSeek、MiniMax、GLM

国内主流AI工具对比 - 豆包、元宝、千问、Kimi、DeepSeek、MiniMax、GLM AI生成,仅供参考 引言 在AI技术快速发展的今天,国内涌现出了众多优秀的AI工具。本文将对比分析国内主流的7款AI工具:豆包、元宝、千问、Kimi、DeepSeek、MiniMax、GLM,帮助你选择最适合自己的AI工具。 工具概览 工具开发公司主要特点适用场景豆包字节跳动功能全面、响应快速、免费使用快速问答、写作辅助、翻译需求元宝腾讯视频会议AI助手、实时字幕、会议纪要视频会议、客户沟通、在线培训千问阿里云强大的中文理解能力、多模态支持深度对话、写作辅助、代码开发KimiMoonshot AI超长上下文、文档处理能力长文档处理、学术研究、知识管理DeepSeekDeepSeek AI代码能力强、推理能力强、开源代码开发、深度分析、技术研究MiniMaxMiniMax多模态能力强、创意生成内容创作、创意生成、娱乐互动GLM智谱AI学术背景强、中文理解好学术研究、知识问答、

AI 大模型落地系列|Eino ADK体系篇:你对 ChatModelAgent 有了解吗?

AI 大模型落地系列|Eino ADK体系篇:你对 ChatModelAgent 有了解吗?

声明:本文源于官方文档,重点参考 Eino ADK: ChatModelAgent、Eino ADK: 概述、Eino ADK: Agent 协作 分享一个很棒的AI技术博客,对AI感兴趣的朋友强烈推荐去看看http://blog.ZEEKLOG.net/jiangjunshow。 为什么很多人把 ChatModelAgent 想简单了?一文讲透 ReAct、Transfer、AgentAsTool 与 Middleware * 1. 为什么很多人会把 `ChatModelAgent` 想简单 * 2. `ChatModelAgent` 在 ADK 里到底是什么 * 3. 其内部本质是一个 `ReAct` 循环 * 没有 Tool 时会怎样 * 为什么还需要 `MaxIterations` * 4. 哪几组配置真正决定了行为 * `Name / Description`