知識
不管是網站,軟件還是小程序,都要直接或間接能為您產生價值,我們在追求其視覺表現(xiàn)的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站成為營銷工具,讓軟件能切實提升企業(yè)內部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
小程序如何封裝路由?這五個方法及使用場景要了解
發(fā)表時間:2021-1-4
發(fā)布人:葵宇科技
瀏覽次數(shù):49
封裝路由方法
路由方法有五個,常用的有三個switchTab
、navigateTo
、navigateBack
簡單介紹一下這五個方法及使用場景
-
switchTab
,跳轉tabBar
頁面專用,其他頁面出棧,新頁面入棧 -
navigateTo
最常用的路由跳轉,會加入到頁面棧,允許返回,也就是新頁面不斷入棧 -
navigateBack
返回,只能返回到頁面棧中存在的頁面,頁面不斷出棧,直到到達目標頁 -
redirectTo
關閉當前頁面,跳轉某個頁面,當前頁面不會加入到頁面棧,也就是說當前頁面不能通過返回到達,比如付款頁面,付款完成后,最好不要再讓用戶返回到付款頁,再比如一些無法修改的操作,比如刪除商品,商品刪除后再通過navigateBack
返回再刪除一次商品,體驗肯定不好,表現(xiàn)為當前頁面出棧,新頁面入棧 -
reLaunch
關閉所有頁面,打開某個頁面,可以打開任意頁面包括tabBar
,適合強制完成某個操作的頁面,比如登錄頁,當已登錄的用戶點擊退出后,進入登錄頁,那么就不能通過返回再回去了,就必須留下來登錄或注冊,適合用這個,表現(xiàn)為所有頁面出棧,新頁面入棧
封裝
// 封裝路由方法
export default {
/**
* function
* @param {string} url 目標頁面的路由
* @param {Object} param 傳遞給目標頁面的參數(shù)
* @description 處理目標頁面的參數(shù),轉成json字符串傳遞給param字段,在目標頁面通過JSON.parse(options.param)接收
*/
navigateTo(url,param={}){
if(param){
url+=`?param=${JSON.stringify(param)}`
}
wx.navigateTo({
url:url,
fail(err) {
console.log('navigateTo跳轉出錯',err)
},
})
},
/**
* function
* @param {string} url 目標頁面的路由
* @param {Object} param 傳遞給目標頁面的參數(shù),只有頁面棧無目標頁面調用navigateTo時,參數(shù)才會生效,單單返回不能設置參數(shù)
* @description 先取出頁面棧,頁面棧最多十層,判斷目標頁面是否在頁面棧中,如果在,則通過目標頁的位置,返回到目標頁面,否則調用navigateTo方法跳轉到目標頁
*/
navigateBack(url,param={}){
const pagesList = getCurrentPages()
let index = pagesList.findIndex(e=>{
return url.indexOf(e.route)>=0
})
if(index == -1){ // 沒有在頁面棧中,可以調用navigateTo方法
this.navigateTo(url,param)
}else{
wx.navigateBack({
delta: pagesList.length-1-index,
fail(err){
console.log('navigateBack返回出錯',err)
}
})
}
},
switchTab(url){ // 封裝switchTab,switchTab不能有參數(shù)
wx.switchTab({
url:url
})
},
redirectTo(url,param={}){ // 封裝redirectTo,和navigateTo沒啥區(qū)別
if(param){
url+=`?param=${JSON.stringify(param)}`
}
wx.redirectTo({
url:url,
fail(err) {
console.log('redirectTo跳轉出錯',err)
},
})
},
reLaunch(url,param={}){ // 封裝reLaunch,和navigateTo沒啥區(qū)別
if(param){
url+=`?param=${JSON.stringify(param)}`要根據(jù)具體業(yè)務來,該返回就返回,該跳轉就用跳轉,不能一直跳轉!
}
wx.reLaunch({
url:url,
fail(err) {
console.log('reLaunch跳轉出錯',err)
},
})
}
}