微信路由增强工具.
wx-nav
的 api
完全根据微信小程序原生 api
实现和扩展:
wx-nav API | |
---|---|
wx.navigateTo | navigateTo |
wx.navigateBack | navigateBack |
navigateBackTo | |
navigateLastTo | |
refresh | |
wx.switchTab | switchTab |
wx.reLaunch | reLaunch |
wx.redirectTo | redirectTo |
-
路由拦截器
-
新增
API
-
处理小程序页面栈最大长度问题
-
回退时自动处理连续重复页面,包括
navigateBack
、navigateBackTo
、navigateLastTo
-
根据路由自动处理
tabBar
页面跳转 -
更好的性能和编码体验
引入 ./dist/wx-nav.cjs.js
或 ./dist/wx-nav.esm.js
。
或者使用 npm
or yarn
安装:
npm i --save wx-nav
yarn add wx-nav
// src/utils/wxnav.js
import WxNav from "wx-nav"
export const {
navigateTo,
navigateBack,
navigateBackTo,
navigateLastTo,
refresh,
switchTab,
reLaunch,
redirectTo
} = new WxNav({
// optional. default value 10. max length of page stack.
maxStack: 10,
// optional. for `refresh()` or `switchTab(pageAlias)`
tabBarPages: {
// pageAlias: pageRoute
home: "pages/home/main",
userCenter: "pages/userCenter/main"
},
// optional
beforeEach(to, from, next, apiName){
next()
},
// optional
afterEach(to, from, apiName){}
})
// index.vue
goToNextPage(){
navigateTo("pages/nextpage/main", {from: "home"}, (isSuccess) => {
if(!isSuccess){
console.log("navigateTo fail")
}
})
}
navigateTo(url [, query [, cb]])
navigateTo(url [, cb])
url
: string.query
: object. 类似{a:b, c:d}
会被拼接为页面地址参数${url}?a=b&c=d
.cb
: function. 可选。接收一个布尔值表明跳转是否成功。
类似 wx.navigateTo
, 不同的是,如果当前页面栈的长度是限定值时,navigateTo
会自动调用 redirectTo
。
navigateBack(delta, cb)
navigateBack(cb)
navigateBack()
delta
: integer。后退页数。默认为1
。
类似 wx.navigateBack
, 但是 navigateBack()
会检查上个路径是否重复。如果当前页面栈是 [A, B, C, C, C, D]
, navigateBack()
调用后页面栈会变为 [A, B, C]
。
navigateBackTo(url [, cb])
navigateBackTo(url)
会在页面栈中前面的页面中找到最后面的 url
并返回到该页。此时,如果 url
重复,会进行处理。
如果页面栈是 [A, C, B, C, C, C, D, E, F]
, navigateBackTo(C)
调用后页面栈变为 [A, C, B, C]
。
navigateLastTo(url [, cb])
navigateLastTo(url)
断言上一页是 url
并返回到 url
。
- 如果
url
重复,会进行处理。 如果页面栈是[A, B, C, C, C, D]
,navigateLastTo(C)
调用后页面栈变为[A, B, C]
。 - 如果上个页面不是
url
,则会调用redirectTo()
重定向到url
。 如果页面栈是[A, B, C, D]
,navigateLastTo(C)
调用后页面栈变为[A, B, C]
。 如果页面栈是[A, B, C, D]
,navigateLastTo(D)
调用后页面栈变为[A, B, C, D]
, 当前页面D
会刷新。
refresh(cb)
refresh()
刷新当前页面,支持 TabBar
页面。
switchTab(target [, cb])
target
: string.url
或者url
的别名。 官方api
不支持url
带参,故不支持query
。详情见 官方文档
redirectTo(url [, query, cb])
redirectTo(url [, cb])
reLaunch(url [, query, cb])
reLaunch(url [, cb])
比 wx.reLaunch
拥有更好的性能。
MIT