项目场景:
提示:这里简述项目相关背景:二维码中的参数是文章的id
。在微信公众号
相关的配置在这就不说明了。
假设配置完成域名为:?id=${id}
。
下面主要讲述小程序方面的代码编写。
需求
: 通过扫描二维码进入小程序的文章详情detail页面
,首先判断用户之前是否登录过小程序,如果没有登录过则跳到登录login页面
进行登录,登录成功后返回到文章详情detail页面
;如果已经登录则直接通过接口查看文章详情。
问题分析:
一、当我们扫码二维码进入
文章详情页面
时,假设用户没有登录,跳转到登录login页面
,登录成功后需要判断跳转到程序首页
还是文章详情页面
二、登录成功后再次返回
文章详情页面
时,在onload
函数中获取不到之前扫码进入小程序的参数文章id
解决方案:
在跳转登录页面时,将
参数id
存入缓存,给登录login页面
传递一个标识flag
,表示我们是从文章详情
进入,登录成功后还需要返回到文章详情
文章详情页面detail.js
onLoad: function (options) {// 通过获取 token 判断用户是否登录过小程序let token = wx.getStorageSync('Token')let id = token && wx.getStorageSync('id') // id存在说明是从扫描二维码进入,但用户没有登录if(id){// 将缓存中的 文章id 清除wx.removeStorageSync('id')//TODO 在这里调获取文章详情的接口}else{// 说明扫码进入// url为配置的域名, 通过字符串切割的方法获取参数idlet url = decodeURIComponent(options.q)let id = url.split('=')[1]// 说明登录过小程序if(token){//TODO 在这里调获取文章详情的接口}else{// 说明没有登录过小程序// 将参数id放进缓存,等登录成功返回此页面时用来获取文章详情wx.setStorageSync('id',id)wx.navigateTo({url: '/pages/login/login?flag=1',})}}},
登录页面login.js
Page({data: {ifFlag:false, // 判断是否从文章详情页面进入},onLoad: function (options) {// 获取flag标识const flag = options.flag ? true : falsethis.setData({flag})}// 登录函数submit(){// TODO 登录成功后我们只需要判断flagif(flag) // 跳到文章详情页面else // 正常跳到程序首页}})