当前位置 博文首页 > 你见过思念放过谁的博客:**微信小程序之登录后返回登录前的页面
在实际开发过程中,由于接口的各种限制条件,比如下单操作,就需要用户进行登录才能进行调用,如果用户登录之后留在了登录页,这个操作就很不友好了,非常影响用户体验,这时候我们就需要登陆后返回上一个页面。然而在用户登录之后再返回之前的页面怎么操作呢?思路是:首先,我要知道用户之前在哪个页面进行操作。其次,我们需要获取到这个页面的路由。最后,再登录后返回该路由。但是有时候,这些页面也是携带了参数的,需要登录之后带参数返回(其实说白了,就类似于一个完整的url,只是小程序中没有ip+端口号,直接就是路径+参数,要全部获取到。)
那么,用户在哪些页面操作时可能需要进行登录操作?这个就去问你们后台吧,哪些接口需要登录之后调用,在调用该接口的页面获取路由就好了。另外,你也可以在app.js里全局获取。这里我们要用到getCurrentPages()方法
所以,整个流程则是:
1.获取路由和路由参数。
2.拼接路由(getCurrentPages方法获取到的是单独的两个对象,不是完整的url,当参数过多时需要用&自行拼接)
3.登录
4.返回
以下是两个方法,可用于封装后直接调用,也可以直接写在app.js中:
/*获取当前页带参数的url*/
function getUrl() {
var pages = getCurrentPages() //获取加载的页面
var currentPage = pages[pages.length - 1] //获取当前页面的对象
var url = currentPage.route //当前页面url
wx.setStorageSync('Router', `/${url}`)
var options = currentPage.options //如果要获取url中所带的参数可以查看options
//参数多时通过&拼接url的参数
var urlWithArgs = url + '?'
for (var key in options) {
var value = options[key]
urlWithArgs += key + '=' + value + '&'
}
urlWithArgs = urlWithArgs.substring(0, urlWithArgs.length - 1)
wx.setStorageSync('Url', `/${urlWithArgs}`)
}
// 获取当前页面路由
function getRouter() { //此方法跟上面一个方法前四行一致,只是这里是获取路由不是拼接参数的
var pages = getCurrentPages() //获取加载的页面
var currentPage = pages[pages.length - 1] //获取当前页面的对象
var router = currentPage.route //当前页面url
wx.setStorageSync('Router', `/${router}`)
}
然后就是登录后路由跳转和处理用户数据的一些逻辑了,这里我只讲一个跳转的问题:如下代码
if (router === '/pages/index/index') {
wx.switchTab({
url: url,
})
} else {
wx.redirectTo({
url: url,
})
}
很明显啊,要做一个判断,如果是主页过来的,你可以让它跳回去也可以不跳回去,一般是没这个必要的。
其次,如果你要跳回去,而且主页是tabbar,就得注意了,小程序的tabbar跳转方法是switchTab,切记,如果你获取的路由是你tabbar上的路由的话,一定要用switchTab去跳转,否则直接用redirectTo跳转就行了。
Over