diff --git a/hooks/README.md b/hooks/README.md new file mode 100644 index 0000000..73a7ad5 --- /dev/null +++ b/hooks/README.md @@ -0,0 +1,70 @@ +# Composables 使用指南 + +## 导航栏状态管理 (useNavigation) + +这个 composable 用于管理导航栏的状态,特别是检测当前路由栈中的页面数量,帮助决定是否显示返回首页按钮。 + +### 基本用法 + +```vue + + + +``` + +### 关键属性和方法 + +| 名称 | 类型 | 说明 | +| --- | --- | --- | +| hasMultiplePages | Ref\ | 路由栈中是否有多个页面,用于决定是否显示返回按钮 | +| isTabBarPage | Ref\ | 当前页面是否为 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` 文件 diff --git a/hooks/useNavigation.ts b/hooks/useNavigation.ts new file mode 100644 index 0000000..ab28d71 --- /dev/null +++ b/hooks/useNavigation.ts @@ -0,0 +1,48 @@ +import { ref } from 'vue' + +/** + * 导航栏状态管理 Composable + * 检查当前路由栈是否大于1条,用于决定是否显示返回首页按钮 + * @returns 包含路由栈状态和相关方法的对象 + */ +export function useNavigation() { + // 是否有多个页面在路由栈中 + const hasMultiplePages = ref(false) + // 当前页面是否为 tabBar 页面 + const isTabBarPage = ref(false) + // tabBar 页面路径列表 + const tabBarPages = [ + 'pages/index/index', + 'pages/message/index', + 'pages/mine/index' + ] + + /** + * 检查当前页面是否为 tabBar 页面 + */ + const checkIsTabBarPage = (currentRoute: string) => { + isTabBarPage.value = tabBarPages.includes(currentRoute) + } + + /** + * 检查当前路由栈状态 + * 在每个页面的 onShow 或 onLoad 生命周期调用此方法 + */ + const checkRouteStack = () => { + // 获取当前页面路由 + const pages = getCurrentPages() + // 获取当前页面路径 + const currentRoute = pages[pages.length - 1]?.route || '' + + // 更新路由栈状态 + hasMultiplePages.value = pages.length > 1 + // 检查是否为 tabBar 页面 + checkIsTabBarPage(currentRoute) + } + + return { + hasMultiplePages, + isTabBarPage, + checkRouteStack + } +} diff --git a/pagesA/my_order/detail.vue b/pagesA/my_order/detail.vue index 87ae5d6..8dfe123 100644 --- a/pagesA/my_order/detail.vue +++ b/pagesA/my_order/detail.vue @@ -6,7 +6,9 @@ safeAreaInsetTop fixed placeholder> @@ -139,7 +141,18 @@