国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 課堂 > 小程序 > 正文

小程序封裝路由文件和路由方法(5種全解析)

2020-03-21 15:54:59
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

小程序5種路由方法使用場(chǎng)景,封裝路由文件和路由方法,提升小程序體驗(yàn)和開(kāi)發(fā)效率

明確要解決的問(wèn)題

  • 每次使用路由時(shí),總是粘貼復(fù)制路徑,這樣在路徑有修改時(shí),需要修改所有用到該路徑的地方,維護(hù)成本高
  • 路由跳轉(zhuǎn)時(shí)拼接參數(shù)讓人頭大,業(yè)務(wù)復(fù)雜時(shí)要拼接十幾個(gè)參數(shù)
  • 路由返回,只會(huì)返回一層,不能直接返回到目標(biāo)頁(yè)面,因?yàn)椴恢滥繕?biāo)頁(yè)面是否在路由棧中,也不知道在第幾層

這些問(wèn)題都可以通過(guò)封裝路由文件和路由方法解決,提供開(kāi)發(fā)效率,減少BUG,省下來(lái)的時(shí)間可以多陪陪女朋友

封裝路由文件,對(duì)路由進(jìn)行統(tǒng)一管理

在根目錄創(chuàng)建router.js

// 這是路由管理頁(yè)面,在此統(tǒng)一配置路由export default { 'index':'/index/index', // 首頁(yè) 'list':'/list/list', // list頁(yè)面 'top':'/top/top', // top頁(yè)面}

解決了第一個(gè)問(wèn)題

封裝路由方法

路由方法有五個(gè),常用的有三個(gè)switchTab、navigateTo、navigateBack
簡(jiǎn)單介紹一下這五個(gè)方法及使用場(chǎng)景

  • switchTab,跳轉(zhuǎn)tabBar頁(yè)面專用,其他頁(yè)面出棧,新頁(yè)面入棧
  • navigateTo最常用的路由跳轉(zhuǎn),會(huì)加入到頁(yè)面棧,允許返回,也就是新頁(yè)面不斷入棧
  • navigateBack返回,只能返回到頁(yè)面棧中存在的頁(yè)面,頁(yè)面不斷出棧,直到到達(dá)目標(biāo)頁(yè)
  • redirectTo關(guān)閉當(dāng)前頁(yè)面,跳轉(zhuǎn)某個(gè)頁(yè)面,當(dāng)前頁(yè)面不會(huì)加入到頁(yè)面棧,也就是說(shuō)當(dāng)前頁(yè)面不能通過(guò)返回到達(dá),比如付款頁(yè)面,付款完成后,最好不要再讓用戶返回到付款頁(yè),再比如一些無(wú)法修改的操作,比如刪除商品,商品刪除后再通過(guò)navigateBack返回再刪除一次商品,體驗(yàn)肯定不好,表現(xiàn)為當(dāng)前頁(yè)面出棧,新頁(yè)面入棧
  • reLaunch關(guān)閉所有頁(yè)面,打開(kāi)某個(gè)頁(yè)面,可以打開(kāi)任意頁(yè)面包括tabBar,適合強(qiáng)制完成某個(gè)操作的頁(yè)面,比如登錄頁(yè),當(dāng)已登錄的用戶點(diǎn)擊退出后,進(jìn)入登錄頁(yè),那么就不能通過(guò)返回再回去了,就必須留下來(lái)登錄或注冊(cè),適合用這個(gè),表現(xiàn)為所有頁(yè)面出棧,新頁(yè)面入棧

開(kāi)始封裝,在根目錄創(chuàng)建utils.js

// 封裝路由方法export default { /**   * function  * @param {string} url 目標(biāo)頁(yè)面的路由  * @param {Object} param 傳遞給目標(biāo)頁(yè)面的參數(shù)  * @description 處理目標(biāo)頁(yè)面的參數(shù),轉(zhuǎn)成json字符串傳遞給param字段,在目標(biāo)頁(yè)面通過(guò)JSON.parse(options.param)接收  */  navigateTo(url,param={}){  if(param){   url+=`?param=${JSON.stringify(param)}`  }  wx.navigateTo({   url:url,   fail(err) {    console.log('navigateTo跳轉(zhuǎn)出錯(cuò)',err)    },  }) },  /**   * function  * @param {string} url 目標(biāo)頁(yè)面的路由  * @param {Object} param 傳遞給目標(biāo)頁(yè)面的參數(shù),只有頁(yè)面棧無(wú)目標(biāo)頁(yè)面調(diào)用navigateTo時(shí),參數(shù)才會(huì)生效,單單返回不能設(shè)置參數(shù)  * @description 先取出頁(yè)面棧,頁(yè)面棧最多十層,判斷目標(biāo)頁(yè)面是否在頁(yè)面棧中,如果在,則通過(guò)目標(biāo)頁(yè)的位置,返回到目標(biāo)頁(yè)面,否則調(diào)用navigateTo方法跳轉(zhuǎn)到目標(biāo)頁(yè)  */   navigateBack(url,param={}){  const pagesList = getCurrentPages()  let index = pagesList.findIndex(e=>{   return url.indexOf(e.route)>=0  })  if(index == -1){ // 沒(méi)有在頁(yè)面棧中,可以調(diào)用navigateTo方法   this.navigateTo(url,param)  }else{   wx.navigateBack({    delta: pagesList.length-1-index,    fail(err){     console.log('navigateBack返回出錯(cuò)',err)    }   })  } }, switchTab(url){ // 封裝switchTab,switchTab不能有參數(shù)  wx.switchTab({   url:url  }) }, redirectTo(url,param={}){ // 封裝redirectTo,和navigateTo沒(méi)啥區(qū)別  if(param){   url+=`?param=${JSON.stringify(param)}`  }  wx.redirectTo({   url:url,   fail(err) {    console.log('redirectTo跳轉(zhuǎn)出錯(cuò)',err)    },  }) }, reLaunch(url,param={}){ // 封裝reLaunch,和navigateTo沒(méi)啥區(qū)別  if(param){   url+=`?param=${JSON.stringify(param)}`要根據(jù)具體業(yè)務(wù)來(lái),該返回就返回,該跳轉(zhuǎn)就用跳轉(zhuǎn),不能一直跳轉(zhuǎn)!  }  wx.reLaunch({   url:url,   fail(err) {    console.log('reLaunch跳轉(zhuǎn)出錯(cuò)',err)    },  }) }}

以上對(duì)參數(shù)的封裝解決了第二個(gè)問(wèn)題,對(duì)navigateBack的封裝解決了第三個(gè)問(wèn)題

總結(jié)

小程序的路由跳轉(zhuǎn)有很多方法,但具體場(chǎng)景下合適的只有一個(gè),選擇合適的路由跳轉(zhuǎn)方式會(huì)提高用戶體驗(yàn),封裝主要是提升開(kāi)發(fā)效率,減少后期維護(hù)成本

小程序代碼片段地址 https://developers.weixin.qq.com/s/CsoJwDmR7B8N

github,如果幫到了你,就給一顆star吧

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新野县| 和田县| 琼海市| 广水市| 桂平市| 太仓市| 苍梧县| 商南县| 河池市| 太谷县| 金寨县| 福泉市| 遵化市| 绩溪县| 泽州县| 禄丰县| 赞皇县| 曲松县| 克拉玛依市| 股票| 张家港市| 聊城市| 当雄县| 惠安县| 鲁甸县| 湄潭县| 庆云县| 平昌县| 恩施市| 库车县| 东安县| 探索| 长兴县| 米脂县| 山东省| 灌云县| 云林县| 文成县| 泾川县| 锡林郭勒盟| 巴里|