staff/hooks
张文涛 1cd188f1db 增加hooks方法 判断路由栈数量 兼容微信小程序导航栏返回首页的功能(home) 2025-03-03 20:42:28 +08:00
..
README.md 增加hooks方法 判断路由栈数量 兼容微信小程序导航栏返回首页的功能(home) 2025-03-03 20:42:28 +08:00
useNavigation.ts 增加hooks方法 判断路由栈数量 兼容微信小程序导航栏返回首页的功能(home) 2025-03-03 20:42:28 +08:00

README.md

Composables 使用指南

导航栏状态管理 (useNavigation)

这个 composable 用于管理导航栏的状态,特别是检测当前路由栈中的页面数量,帮助决定是否显示返回首页按钮。

基本用法

<template>
  <view class="custom-navbar">
    <!-- 返回按钮 - 当路由栈有多个页面时显示 -->
    <view v-if="hasMultiplePages" class="back-btn" @click="uni.navigateBack()">
      <text class="ri-arrow-left-s-line"></text>
    </view>
    
    <!-- 返回首页按钮 - 当路由栈有多个页面且不是tabBar页面时显示 -->
    <view v-if="hasMultiplePages && !isTabBarPage" class="home-btn" @click="toHome">
      <text class="ri-home-line"></text>
    </view>
    
    <!-- 页面标题 -->
    <view class="title">页面标题</view>
  </view>
</template>

<script setup>
import { onShow } from '@dcloudio/uni-app'
import { useNavigation } from '@/composables/useNavigation'

// 使用导航 composable
const { 
  hasMultiplePages,   // 是否有多个页面在路由栈中
  isTabBarPage,       // 当前页面是否为 tabBar 页面
  checkRouteStack     // 检查当前路由栈状态的方法
} = useNavigation()

// 返回首页方法
const toHome = () => {
  uni.switchTab({
    url: '/pages/index/index'
  })
}

// 在 onShow 生命周期中重新检查路由栈状态
onShow(() => {
  checkRouteStack()
})
</script>

关键属性和方法

名称 类型 说明
hasMultiplePages Ref<boolean> 路由栈中是否有多个页面,用于决定是否显示返回按钮
isTabBarPage Ref<boolean> 当前页面是否为 tabBar 页面,用于决定是否显示返回首页按钮
checkRouteStack Function 检查并更新当前路由栈状态的方法,在页面显示时调用

使用步骤

  1. 在页面中导入 useNavigation
  2. setup 中调用此函数,获取状态和方法
  3. onShow 生命周期中调用 checkRouteStack() 方法更新状态
  4. 在模板中根据 hasMultiplePagesisTabBarPage 状态显示或隐藏相应的按钮

注意事项

  • 需要在每个页面的 onShow 生命周期中调用 checkRouteStack(),以确保状态始终是最新的
  • tabBar 页面列表已经预设为 ['pages/index/index', 'pages/message/index', 'pages/mine/index'],如需修改请直接编辑 useNavigation.ts 文件