Navigator

Navigator

导航器
由于小程序只支持最多5级页面(后放宽至10级),但需求上希望维护更长的历史栈,故自行维护完整历史栈并改写默认导航操作
使用:详见 [基础能力] 无限层级的路由机制

Constructor

Source:

Members

(static) history

Source:

完整历史记录

Methods

(static) config(optionsopt)

Source:

安装

Parameters:
Name Type Attributes Description
options Object <optional>

配置

Properties
Name Type Attributes Description
enableCurtain boolean <optional>

是否开启空白中转策略

curtainPage string <optional>

(开启空白中转策略时)空白中转页

enableTaintedRestore boolean <optional>

是否开启实例覆盖自动恢复策略

pageRestoreHandler Navigator~PageRestoreHandler <optional>

页面数据恢复函数,用于

  1. wepy实例覆盖问题,存在两级同路由页面时,前者数据会被后者覆盖,返回时需予以恢复
  2. 层级过深时,新开页面会替换前一页面,导致前一页面数据丢失,返回时需予以恢复
MAX_LEVEL number <optional>

小程序支持打开的页面层数

oriNavOverrides Object.<string, function()> <optional>

自定义覆盖部分/全部底层跳转api,默认为: {navigateTo: wx.navigateTo, redirectTo: wx.redirectTo, navigateBack: wx.navigateBack, reLaunch: wx.reLaunch, switchTab: wx.switchTab}

(async, static) navigateBack(optsopt) → {Object}

Source:

返回

Parameters:
Name Type Attributes Description
opts Object <optional>
Properties
Name Type Attributes Description
delta number <optional>

返回层数

success function <optional>

兼容起见支持回调,成功时触发

fail function <optional>

兼容起见支持回调,失败时触发

complete function <optional>

兼容起见支持回调,成功失败均触发

Returns:

返回结果,格式形如:{succeeded: true, errMsg: 'ok'}

Type
Object

(async, static) navigateTo(route) → {Object}

Source:

打开新页面

Parameters:
Name Type Description
route Object
Properties
Name Type Attributes Description
url string

新页面url

success function <optional>

兼容起见支持回调,成功时触发

fail function <optional>

兼容起见支持回调,失败时触发

complete function <optional>

兼容起见支持回调,成功失败均触发

Returns:

跳转结果,格式形如:{succeeded: true, errMsg: 'ok'}

Type
Object

(static) onPageUnload()

Source:

监听页面卸载过程;本质是想监听用户的返回操作(点击物理返回键/左上角返回按钮),但似乎并没有相应接口,暂借助页面onUnload过程进行判断

(async, static) redirectTo(route) → {Object}

Source:

替换当前页面

Parameters:
Name Type Description
route Object
Properties
Name Type Attributes Description
url string

新页面url

success function <optional>

兼容起见支持回调,成功时触发

fail function <optional>

兼容起见支持回调,失败时触发

complete function <optional>

兼容起见支持回调,成功失败均触发

Returns:

跳转结果,格式形如:{succeeded: true, errMsg: 'ok'}

Type
Object

(async, static) reLaunch(routeopt) → {Object}

Source:

关闭所有页面,打开到应用内的某个页面

Parameters:
Name Type Attributes Description
route Object <optional>
Properties
Name Type Attributes Description
url number <optional>

新页面url

success function <optional>

兼容起见支持回调,成功时触发

fail function <optional>

兼容起见支持回调,失败时触发

complete function <optional>

兼容起见支持回调,成功失败均触发

Returns:

跳转结果,格式形如:{succeeded: true, errMsg: 'ok'}

Type
Object

(async, static) switchTab(routeopt) → {Object}

Source:

跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面

Parameters:
Name Type Attributes Description
route Object <optional>
Properties
Name Type Attributes Description
url number <optional>

需要跳转的 tabBar 页面的路径

success function <optional>

兼容起见支持回调,成功时触发

fail function <optional>

兼容起见支持回调,失败时触发

complete function <optional>

兼容起见支持回调,成功失败均触发

Returns:

跳转结果,格式形如:{succeeded: true, errMsg: 'ok'}

Type
Object

Type Definitions

PageRestoreHandler(route, context) → {Object}

Source:

页面数据恢复处理函数

Example
function pageRestoreHandler({route, context}){
  //根据route.url或其它信息获取当前页面实例
  //....
  
  //根据route.wxPage从微信原生页面实例拷贝中恢复当前页面实例数据
  switch (context){
    case 'tainted': //实例覆盖问题导致的数据丢失
      //此时滚动位置等界面状态均正常,恢复数据即可
      break;
    case 'unloaded': //层级问题导致的数据丢失
      //此时页面处于刷新结束状态,除了数据,滚动位置等界面状态最好也能一并恢复
      break;
    default:
      console.error('[pageRestoreHandler] unknown context:', context);
  }
  return {succeeded: true}
}
Parameters:
Name Type Description
route History~Route

路由对象

context string

数据丢失场景: tainted - 实例覆盖问题导致的数据丢失 | unloaded - 层级问题导致的数据丢失

Returns:

数据恢复是否成功,格式形如:{succeeded: true}

Type
Object