staff/hooks/README.md

71 lines
2.3 KiB
Markdown

# Composables 使用指南
## 导航栏状态管理 (useNavigation)
这个 composable 用于管理导航栏的状态,特别是检测当前路由栈中的页面数量,帮助决定是否显示返回首页按钮。
### 基本用法
```vue
<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. 在模板中根据 `hasMultiplePages``isTabBarPage` 状态显示或隐藏相应的按钮
### 注意事项
- 需要在每个页面的 `onShow` 生命周期中调用 `checkRouteStack()`,以确保状态始终是最新的
- tabBar 页面列表已经预设为 `['pages/index/index', 'pages/message/index', 'pages/mine/index']`,如需修改请直接编辑 `useNavigation.ts` 文件