原文地址:http://callmesoul.cnjson
1.app onLaunch小程序
2.若是有app onLaunch 的 path参数有值则跳到 path对应页面不然为app的json第一个路由app
1.经过分享给朋友的接口传的path异步
暂时只发现这个函数
之后可得知小程序统一入口就是app的onLaunch,因此在onLaunch 拦截是最理想的。可是onLaunch里并无提供拦截的接口或方法,当你在onLaunch有异步处理时,还没处理完,onLaunch就直接跳到了下一个页面了。code
例如:你想得到用户信息在进入页面。接口
你在app onLaunch去请求用户信息,但onLaunch不会等你请求完再跳到页面。路由
因此在app没办法实现。it
既然app里面实现不了只能退居求次在第一个页面处理了,由于当没有path(onLaunch(option))也就是正常打开小程序都会进入第一个页面,咱们能够在第一个页面统一处理好逻辑再选择去跳其余页面。io
其实很简单分享的时候分享页面的path填写第一个页面路由例如/pages/login,在把你当前页面的路由做为一个参数一块儿传过去:
onShareAppMessage(res) { let fromPath='/pages/activity' return { title: 'xxxxx!', path: '/pages/login?fromPath='+fromPath, imageUrl:xxxxx, success: (res) => { xxxxxx } } }
这样分享出去的页面就会跳到一个页面并且是带你分享的页面路径做为参数的。
在第一个页面得到分享的路径作跳转就好,还能够加些逻辑之类方便多。
上面的写法有个问题,若是分享的页面也要参数,分享的path就会有两个??
/pages/login?fromPath=/pages/activity?activityId=1
若是这样直接传过去第一个页面,activityId会被拦截掉,因此咱们须要一个把问号转码的函数转码了再传过去,第一个页面得到页面后解码再跳转便可:
onShareAppMessage(res) { let fromPath='/pages/activity?activityId=2' fromPath=encodeURIComponent(fromPath); return { title: xxxxxx!', path: '/pages/login?fromPath='+fromPath, imageUrl:xxxx, success: (res) => { xxxx } } }
而后在第一个页面使用对应函数解码便可:
onLoad(params){ if(params.fromPath){ let fromPath=decodeURIComponent(params.fromPath); ///do somethings... } }
大概流程就这样。