解决Vue3+uni-app导航栏高亮自动同步方案

路由跳转自动识别导航高亮实现方法

以下代码使用wd-tabbar组件实现路由跳转时自动同步导航栏高亮状态,适用于所有的Vue3+uni-app项目。 请根据自身使用框架类型完成,也可根据我使用的UI组件进行完成地址如下:

Tabbar 标签栏 | Wot UI ,如需使用请按照Wot UI先进行安装后可直接粘贴复制我的代码!

感谢各位尊敬的VIP用户的支持,如果有帮助到您,还请您给一个宝贵的赞!

html 复制代码
<template>
  <view>
    <wd-tabbar fixed v-model="navIndex" bordered safeAreaInsetBottom placeholder shape="round">
      <wd-tabbar-item
        v-for="(item, index) in tabbarList"
        :key="index"
        @click="navBarRule(index)"
        :title="item.title"
        :icon="item.icon"
        :value="item.value"
        :is-dot="item.isDot"
      ></wd-tabbar-item>
    </wd-tabbar>
  </view>
</template>
typescript 复制代码
<script setup lang="ts">
import { ref, computed } from 'vue';

const navIndex = ref(0);
const tabbarList = ref([
  {
    title: '订单中心',
    icon: 'list',
    value: 2,
    isDot: true,
    path: '/pages/view/order-center/index'
  },
  {
    title: '用户管理',
    icon: 'user',
    value: null,
    isDot: false,
    path: '/pages/view/user-manager/index'
  },
  {
    title: '数据流水',
    icon: 'chart-bar',
    value: null,
    isDot: false,
    path: '/pages/view/data-statement/index'
  },
  {
    title: '聊天',
    icon: 'chat',
    value: 200,
    isDot: false,
    path: '/pages/view/chat/index'
  },
  {
    title: '店主中心',
    icon: 'app',
    value: 10,
    isDot: false,
    path: '/pages/view/store-owner/index'
  }
]);

const navBarRule = (index: number) => {
  uni.reLaunch({
    url: tabbarList.value[index].path
  });
  navIndex.value = index;
};

const currentRoute = computed(() => {
  const pages = getCurrentPages();
  return pages[pages.length - 1]?.route || '';
});

navIndex.value = tabbarList.value.findIndex(
  (item) => item.path === `/${currentRoute.value}`
);
</script>

关键实现要点

  • 通过getCurrentPages()获取当前页面栈信息,计算当前路由路径
  • 使用computed属性动态跟踪路由变化
  • 在组件初始化时同步导航栏选中状态
  • 点击导航栏时使用uni.reLaunch进行路由跳转并更新选中状态

注意事项

  • 确保tabbarList中的path与实际路由路径完全匹配
  • 该实现适用于底部导航栏场景,顶部导航需调整样式
  • 使用uni.reLaunch会关闭所有页面并打开新页面,如需保留页面栈可使用uni.navigateTo

该方案已通过实际项目验证,能稳定实现路由与导航栏状态同步。

如果和我的不同情况下,只要您已经完成了导航组件的搭建,在代码中添加

const currentRoute = computed(() => {

const pages = getCurrentPages();

return pagespages.length - 1?.route || '';

});

navIndex.value = tabbarList.value.findIndex(

(item) => item.path === `/${currentRoute.value}`

);

这段关键性代码即可,最后需要根据你声明的变量进行替换

相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万4 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
A黄俊辉A4 天前
uniapp webview中实现 app和内嵌的H5双向通信
vue.js·json
三十而立洋4 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁4 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄4 天前
JavaScript 隐式全局变量解析
javascript
honkun64 天前
vue 表格组件 vxe-table 配置 ajax 请求自动加载数据与表单查询
vue.js·vxe-table
kybs19914 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net