wx.navigateback到上一页后,上一页的onshow方法不走吗
时间: 2023-12-15 14:01:47 浏览: 259
wx.navigateBack到上一页后,上一页的onShow方法通常会被触发。因为wx.navigateBack是用来返回上一个页面的,当页面重新出现在前台时,会重新触发onShow方法。但有一些特殊情况下,上一页的onShow方法可能不会被触发,比如页面被隐藏或者被销毁等情况。总的来说,大部分情况下上一页的onShow方法会被触发,但也要考虑到特殊情况的存在。
相关问题
微信小程序判断是否有上一页,有则wx.navigateBack跳到上一页
微信小程序中,如果你想在用户尝试进入新的页面前检查是否存在上一页面,并在存在时调用`wx.navigateBack`返回上一页,可以使用`onShow`生命周期钩子函数。在这个函数里,你可以检查当前页面是否是从其他页面通过导航过来的,例如:
```javascript
Page({
onShow: function() {
const from = wx.getStorageSync('from') || null; // 获取从哪个页面跳转过来的信息,如果没有存储则默认为null
if (from) { // 如果有存储值,说明有上一页
wx.navigateBack({
delta: 1, // 回退一层,如果希望回退更多层,则调整delta的值
animation: 'slide-out-right', // 动画效果,默认为None
historyBack: true // 是否保留历史记录,默认为true
});
} else {
// 如果没有上一页,直接显示此页
}
},
})
```
在用户离开当前页面时,可以将`from`信息保存到本地存储,以便在下一次展示时判断。注意,这个方法假设每次进入新页面时都会清除`from`信息,如果不是这样,你需要在相应的`onHide`或`onUnload`等生命周期事件中清理。
微信小程序判断是否有上一页,有则wx.navigateBack跳到上一页有哪些方式
微信小程序中,判断页面是否可以回退(即是否存在上一页),并据此调用`wx.navigateBack`方法,通常有以下几种方式:
1. **API检查**:你可以通过调用`Page.getCanBack()`方法获取当前页面是否可以返回,如果返回`true`,表示有上一页。然后可以在合适的生命周期钩子函数(如onLoad、onShow等)中检查这个值,并进行相应的操作。
```javascript
Page({
onLoad() {
if (Page.getCanBack()) {
wx.navigateBack();
}
},
})
```
2. **全局变量存储状态**:如果你需要在整个应用中保持这个状态,可以将当前是否可以返回的状态存放在全局变量或者storage里,在导航前检查一下这个变量。
```javascript
// 在app.js中初始化
globalData.canBack = true;
// 页面切换时更新状态
Page({
onReachBottom() {
globalData.canBack = false;
},
onReady() {
// 判断并处理
if (!globalData.canBack) {
wx.navigateBack();
}
},
})
```
3. **监听历史栈改变**:利用`wx.onHistoryChange`事件,当用户手动或者自动触发回退时,会触发这个事件,此时可以根据event.detail.canBack属性判断。
```javascript
wx.onHistoryChange(function(e) {
if (e.canBack && e.from === 'navigator') {
wx.navigateBack();
}
});
```
阅读全文