buddhism/docs/memorialHall-扫码导航修复说明.md
2025-10-16 17:47:18 +08:00

72 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# memorialHall 扫码导航修复说明
## 问题描述
用户通过扫码直接进入 `memorialHall.vue` 页面时,如果没有上一页(即页面栈中只有当前页面),点击返回按钮会卡在当前页面,无法正常返回。
## 解决方案
### 1. 导入路由工具函数
`memorialHall.vue` 中导入 `navigateBack` 函数:
```javascript
import { navigateBack } from "../../utils/router.js";
```
### 2. 监听导航栏返回事件
为自定义导航栏添加 `@back` 事件监听:
```vue
<custom-navbar ref="customNavbar" title="往生大殿" @back="handleNavbarBack" />
```
### 3. 实现返回处理方法
添加 `handleNavbarBack` 方法,使用 `navigateBack` 函数处理返回逻辑:
```javascript
// 处理导航栏返回事件
handleNavbarBack() {
// 使用路由工具函数,如果没有上一页会自动跳转到首页
navigateBack();
},
```
### 4. 优化自定义导航栏组件
修改 `custom-navbar.vue``handleBack` 方法,支持父组件完全控制返回逻辑:
```javascript
handleBack() {
if (this.showBack) {
// 触发自定义事件,让父组件处理返回逻辑
this.$emit("back");
// 如果父组件没有监听 back 事件,则执行默认返回逻辑
if (!this.$listeners.back) {
uni.navigateBack({
delta: 1,
fail: () => {
// 如果没有上一页,跳转到首页
uni.switchTab({
url: "/pages/index/index",
});
},
});
}
}
},
```
## 工作原理
1. **路由工具函数**`navigateBack` 函数会先尝试 `uni.navigateBack`,如果失败(没有上一页),会自动调用 `reLaunchToPage("index")` 跳转到首页。
2. **事件驱动**:自定义导航栏通过 `@back` 事件将返回控制权交给父组件,父组件可以使用自己的返回逻辑。
3. **向下兼容**:如果父组件没有监听 `@back` 事件,导航栏组件会执行默认的返回逻辑,确保不会破坏现有功能。
## 测试场景
- ✅ 正常页面跳转后返回(有上一页)
- ✅ 扫码直接进入后返回(无上一页,自动跳转首页)
- ✅ 其他页面使用自定义导航栏(向下兼容)
## 相关文件
- `pages/memorial/memorialHall.vue` - 主要修改页面
- `components/custom-navbar/custom-navbar.vue` - 导航栏组件优化
- `utils/router.js` - 路由工具函数(已存在)