路由跳转自动识别导航高亮实现方法
以下代码使用wd-tabbar
组件实现路由跳转时自动同步导航栏高亮状态,适用于所有的Vue3+uni-app项目。 请根据自身使用框架类型完成,也可根据我使用的UI组件进行完成地址如下:
Tabbar 标签栏 | Wot UI ,如需使用请按照Wot UI先进行安装后可直接粘贴复制我的代码!
感谢各位尊敬的VIP用户的支持,如果有帮助到您,还请您给一个宝贵的赞!
<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>
<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 pages[pages.length - 1]?.route || '';
});navIndex.value = tabbarList.value.findIndex(
(item) => item.path === `/${currentRoute.value}`
);这段关键性代码即可,最后需要根据你声明的变量进行替换