用戶在使用App時(shí),對于返回功能的操作社搅,往往習(xí)慣于用手機(jī)自帶的返回鍵驻债,例如乳规,左滑形葬,右滑,機(jī)身自帶返回鍵等暮的,當(dāng)然iPad除外笙以。所以盡管在APP的每個(gè)頁面,開發(fā)者都有設(shè)置返回功能或者跳轉(zhuǎn)功能冻辩,但用戶在使用時(shí)所做的操作可不一定按照開發(fā)者所設(shè)計(jì)的流程走猖腕。
例如拆祈,用戶支付賬單,從未支付的狀態(tài)到完成支付的狀態(tài)后倘感,開發(fā)者會(huì)設(shè)置button用于用戶支付完后跳轉(zhuǎn)相關(guān)頁面放坏。但實(shí)際中,如果用戶支付完之后老玛,通過手機(jī)自身的返回功能淤年,此時(shí)的頁面流程就不是開發(fā)者所設(shè)計(jì)的流程了,又返回到支付前的那個(gè)頁面了蜡豹,而且狀態(tài)可能還未修改麸粮。當(dāng)然這樣的體驗(yàn)是相當(dāng)不好的,所以需要去監(jiān)聽手機(jī)的物理返回鍵镜廉,從而去做相應(yīng)的判斷處理弄诲。
以uniapp項(xiàng)目為例,通過頁面中的onBackPress(event)生命周期函數(shù)做監(jiān)聽娇唯,而不是組件中哦齐遵。
一、介紹
當(dāng)用戶在進(jìn)行以下操作時(shí)塔插,就會(huì)觸發(fā)該函數(shù)洛搀;
- Android 實(shí)體返回鍵 (e.from = backbutton)
- 頂部導(dǎo)航欄的返回按鈕 (e.from = backbutton)
- 使用 uni.navigateBack() (e.from = navigateBack)
在該函數(shù)中,通過retrun true佑淀,來設(shè)置不執(zhí)行默認(rèn)的返回留美,從而自行處理業(yè)務(wù)邏輯;
二伸刃、操作
常見的應(yīng)用場景就是返回指定頁面和應(yīng)用退出時(shí)的彈窗提示谎砾;
- 返回指定頁面:
如果指定的頁面很明確,可以直接調(diào)用路由的api去跳轉(zhuǎn)捧颅;如果要進(jìn)入的頁面的動(dòng)態(tài)變化的景图,則需要獲取相應(yīng)的頁面棧,然后調(diào)用api去跳轉(zhuǎn)碉哑。
2 應(yīng)用退出的彈窗提示挚币,參考代碼如下
// this.MaskBool默認(rèn)為false;
onBackPress() {
if(this.MaskBool) {
this.MaskBool= false;
return true;
}else{
uni.showModal({
title: '提示',
content: '是否退出扣典?',
success: function(res) {
if (res.confirm) {
// 退出應(yīng)用
plus.runtime.quit();
} else if (res.cancel) {
console.log('用戶點(diǎn)擊取消');
}
}
});
return true
}
},
Tips:
1 在onBackPress中不要調(diào)用 uni.navigateBack() 妆毕,會(huì)引發(fā)死循環(huán)的;
2 return false或者不做操作贮尖,都是做默認(rèn)的返回笛粘;
3 H5端,頂部導(dǎo)航欄的返回鍵支持該函數(shù),但手機(jī)的返回鍵及瀏覽器的返回鍵是不支持的薪前,微信中也是一樣的不支持润努。