- 需求的场景描述(希望解决的问题)
需要监听页面路由的变换。在路由变化时做响应的处理
- 希望提供routeChange的相关hook,并可以利用hook的返回值,决定真正路由方向
例如(支持promise更好):
wx.onRouteBeforeChange(({ current: {path: ‘’, query: ‘’}, next: {},}) => {})
wx.onRouteAfterChange(({ current, next }) => {})
考虑了一下,有了个大胆的想法
其实我觉得在现有功能上是基本可以实现路由监听的。那就是重写Page方法, 比如:
const _oldPage = Page; const pages = [];
option.onLoad = function (initOption) { if (pages[pages.length - 1] !== this ) { pages.push( this );
onLoad.call(this, initOption); }; option.onUnload = function () { pages.pop();
} option.router = { navigateTo: function ({ url}) { typeof this .beforeRouteLeave === 'function' && this .beforeRouteLeave(); wx.navigateTo({ url: url }); }, // 同理类似编写switchTab, navigateBack等方法,只是注意其路由变化时触发函数不要重复触发, 因为使用某些路由跳转方法会卸载页面,触发一次onUnload方法 }; _oldPage(option); }; |
向上面这样,在每个页面逻辑里面强行插入自定义的路由状态变更逻辑。应该可以优化很多路由方面的问题
只是一些特性啊,效率上可能没有那么高,比如beforeRouteLeave中无法传入下一个页面实例,如法阻止网页跳转。
有错误欢迎指正。