返回顶部
首页 > 资讯 > 精选 >Android微信小程序怎么保证每个页面都已经登陆
  • 227
分享到

Android微信小程序怎么保证每个页面都已经登陆

2023-06-25 13:06:13 227人浏览 独家记忆
摘要

这篇文章主要介绍“Android微信小程序怎么保证每个页面都已经登陆”,在日常操作中,相信很多人在Android微信小程序怎么保证每个页面都已经登陆问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android

这篇文章主要介绍“Android微信小程序怎么保证每个页面都已经登陆”,在日常操作中,相信很多人在Android微信小程序怎么保证每个页面都已经登陆问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android微信小程序怎么保证每个页面都已经登陆”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

现状

一个微信小程序中,有首页,有个人页面,还有一些列表页面,详情页面等等,这些页面大部分是可以分享的。当分享出去的页面被一个另一个用户打开的时候,这个页面怎么确保这个用户已经登陆了呢?

网上有很多方案是在请求封装里面加一道拦截,如果没有token,就先调用登陆请求获取token后,再继续。

这种方案没毛病,只要注意一点,当一个页面有多个请求同时触发时,当所有请求拦截后,放到一个数组里面,在获取token成功后,遍历数组一个个请求就行。

但这个需求再复杂一点,比如连便利店小程序,大部分页面都需要有一个门店(因为需要根据门店获取当前门店商品的库存、价格等),这个门店是根据当前的定位来调用后台接口获得的,这个时候如果在请求里进行封装就太麻烦了。

解决方案

首先,我们注意到,登陆,获取定位与我们的页面请求是异步的,我们需要保证页面请求是在登陆和获取定位之后,但要是我们每个页面都写一个遍,可维护性就太差了。所以我们可以抽离出一个方法来做这件事。

所以代码就这样了:

const app = getApp()Page({  data: {    logs: []  },  onLoad() {    app.commonLogin(()=>{        // 处理页页面请求    })  }})

做到这里好像是解决我们的问题,但再想一想,如果还想做更多的事,比如说每个页面的onShareAppMessage统一处理,但我又不想在每个页面再写一遍,另外,我又想自己对每个页面实现一个watch,怎么做?

进一步解决方案

我们可以看到微信小程序,每个页面是一个Page(),那么我们可以给这个Page外面加一层壳子,我们可以有一个MyPage来替换这个Page,废话不多说,上代码:

tool.js 相关代码

  handlePageParamMerge(arg) {    let numargs = arg.length; // 获取被传递参数的数值。    let data = {}    let page = {}    for (let ix in arg) {      let item = arg[ix]      if (item.data && typeof (item.data) === 'object') {        data = Object.assign(data, item.data)      }      if (item.methods && typeof (item.methods) === 'object') {        page = Object.assign(page, item.methods)      } else {        page = Object.assign(page, item)      }    }    page.data = data    return page  }    mergePage() {    return this.handlePageParamMerge(arguments)  }    handleCompParamMerge(arg) {    let numargs = arg.length; // 获取被传递参数的数值。    let data = {}    let options = {}    let properties = {}    let methods = {}    let comp = {}    for (let ix in arg) {      let item = arg[ix]      // 合并组件的初始数据      if (item.data && typeof (item.data) === 'object') {        data = Object.assign(data, item.data)      }      // 合并组件的属性列表      if (item.properties && typeof (item.properties) === 'object') {        properties = Object.assign(properties, item.properties)      }      // 合组件的方法列表      if (item.methods && typeof (item.methods) === 'object') {        methods = Object.assign(methods, item.methods)      }      if (item.options && typeof (item.options) === 'object') {        options = Object.assign(options, item.options)      }      comp = Object.assign(comp, item)    }    comp.data = data    comp.options = options    comp.properties = properties    comp.methods = methods    return comp  }    mergeComponent() {    return this.handleCompParamMerge(arguments)  }    newPage() {    let options = this.handlePageParamMerge(arguments)    let that = this    let app = getApp()    //增加全局点击登录判断    if (!options.publicCheckLogin){      options.publicCheckLogin = function (e) {        let pages = getCurrentPages()        let page = pages[pages.length - 1]        let dataset = e.currentTarget.dataset        let callback = null        //获取回调方法        if (dataset.callback && typeof (page[dataset.callback]) === "function"){          callback = page[dataset.callback]        }        // console.log('callback>>', callback, app.isReGISter())        //判断是否登录        if (callback && app.isRegister()){          callback(e)        }        else{          wx.navigateTo({            url: '/pages/login/login'          })        }      }    }    const { onLoad } = options    options.onLoad = function (arg) {      options.watch && that.setWatcher(this)      onLoad && onLoad.call(this, arg)    }    const { onShow } = options    options.onShow = function (arg) {      if (options.data.noAutoLogin || app.isRegister()) {        onShow && onShow.call(this, arg)        //页面埋点        app.ga({})      }      else {        wx.navigateTo({          url: '/pages/login/login'        })      }    }    return Page(options)  }    newComponent() {    let options = this.handleCompParamMerge(arguments)    let that = this    const { ready } = options    options.ready = function (arg) {      options.watch && that.setWatcher(this)      ready && ready.call(this, arg)    }    return Component(options)  }    setWatcher(page) {    let data = page.data;    let watch = page.watch;    Object.keys(watch).forEach(v => {      let key = v.split('.'); // 将watch中的属性以'.'切分成数组      let nowData = data; // 将data赋值给nowData      for (let i = 0; i < key.length - 1; i++) { // 遍历key数组的元素,除了最后一个!        nowData = nowData[key[i]]; // 将nowData指向它的key属性对象      }      let lasTKEy = key[key.length - 1];      // 假设key==='my.name',此时nowData===data['my']===data.my,lastKey==='name'      let watchFun = watch[v].handler || watch[v]; // 兼容带handler和不带handler的两种写法      let deep = watch[v].deep; // 若未设置deep,则为undefine      this.observe(nowData, lastKey, watchFun, deep, page); // 监听nowData对象的lastKey    })  }    observe(obj, key, watchFun, deep, page) {    var val = obj[key];    // 判断deep是true 且 val不能为空 且 typeof val==='object'(数组内数值变化也需要深度监听)    if (deep && val != null && typeof val === 'object') {      Object.keys(val).forEach(childKey => { // 遍历val对象下的每一个key        this.observe(val, childKey, watchFun, deep, page); // 递归调用监听函数      })    }    var that = this;    Object.defineProperty(obj, key, {      configurable: true,      enumerable: true,      set: function (value) {        if (val === value) {          return        }        // 用page对象调用,改变函数内this指向,以便this.data访问data内的属性值        watchFun.call(page, value, val); // value是新值,val是旧值        val = value;        if (deep) { // 若是深度监听,重新监听该对象,以便监听其属性。          that.observe(obj, key, watchFun, deep, page);        }      },      get: function () {        return val;      }    })  }

页面代码:

app.tool.newPage({  data: {    // noAutoLogin: false  },  onShow: function () {    // 在这里写页面请求逻辑  }}

到此,关于“Android微信小程序怎么保证每个页面都已经登陆”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Android微信小程序怎么保证每个页面都已经登陆

本文链接: https://lsjlt.com/news/304880.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android微信小程序怎么保证每个页面都已经登陆
    这篇文章主要介绍“Android微信小程序怎么保证每个页面都已经登陆”,在日常操作中,相信很多人在Android微信小程序怎么保证每个页面都已经登陆问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android...
    99+
    2023-06-25
  • 微信小程序如何保证每个页面都已经登陆详解
    目录现状解决方案进一步解决方案最后现状 一个微信小程序中,有首页,有个人页面,还有一些列表页面,详情页面等等,这些页面大部分是可以分享的。当分享出去的页面被一个另一个用户打开的时候...
    99+
    2024-04-02
  • 小程序如何确保每个页面都已登陆
    这篇文章主要为大家展示了“小程序如何确保每个页面都已登陆”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“小程序如何确保每个页面都已登陆”这篇文章吧。一个微信小程序中,有首页,有个人页面,还有一些列...
    99+
    2023-06-22
  • 微信小程序页面怎么配置
    这篇“微信小程序页面怎么配置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“微信小程序页面怎么配置”文章吧。一、小程序配置1、...
    99+
    2023-06-08
  • 微信小程序怎么注册页面
    本篇内容介绍了“微信小程序怎么注册页面”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!注册过小程序之后,接下来注册页面。代码说明//index...
    99+
    2023-06-19
  • 微信小程序怎么设置首页页面
    微信小程序设置首页页面的方法:在app.json文件中,找到pages数组,设置在第一个的页面就是默认启动页面,因此需要调整你当前开发的页面顺序。在提交正式版本的时候,“配置功能页面”的一步,在功能页面一栏里,选择需要设置为首页页面。在小程...
    99+
    2024-04-02
  • 微信小程序返回某个页面怎么设置
    设置微信小程序返回某个页面的方法:回退上一级页面,代码示例:var pages = getCurrentPages(); //当前页面var beforePage = p...
    99+
    2024-04-02
  • 微信小程序怎么定义一个页面变量
    在微信小程序中定义页面变量的方法首先,打开微信开发者工具,在小程序项目文件中打开一个wxs文件;在文件中,定义一个变量var username,并赋值,表示页面变量;var username = "null"modul.exports.ge...
    99+
    2024-04-02
  • 微信小程序页面大小怎么调整
    微信小程序的页面大小可以通过修改页面的样式来进行调整。1. 打开小程序页面的 `.json` 文件,在 `"navigationBa...
    99+
    2023-08-15
    微信小程序
  • 微信小程序页面文字怎么改
    一、修改页面中的文字信息进入微信开发者工具,打开小程序项目文件,在项目文件中,依次查找:index/index.wxml文件,打开;index.wxml文件打开后,修改页面中标签的文字信息,即可;二、修改页面标题文字进入微信开发者工具,打开...
    99+
    2024-04-02
  • 微信小程序item怎么页面传参
    微信小程序item页面传参的案例:A页面data-id="{{item.id}}"为标记列表的下标,item.id的来源与wx:for="{{ components }}"的列表渲染bindtap=&...
    99+
    2024-04-02
  • Android和微信小程序的初始页面怎么设置
    这篇文章主要讲解了“Android和微信小程序的初始页面怎么设置”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android和微信小程序的初始页面怎么设置”吧!CRM Webclient U...
    99+
    2023-06-04
  • 怎么用css实现微信小程序简洁登录页面
    本篇内容介绍了“怎么用css实现微信小程序简洁登录页面”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.上图2.用户不存在3.上代码1log...
    99+
    2023-06-21
  • 微信小程序里面怎么嵌套html页面
    使用web-view标签实现在小程序中嵌入html网页如:<web-view src="https://www.baidu.com"></web-view>使用微信小程序正式号时,需要将...
    99+
    2024-04-02
  • 微信小程序API怎么实现登录凭证
    这篇文章主要介绍了微信小程序API怎么实现登录凭证的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序API怎么实现登录凭证文章都会有所收获,下面我们一起来看看吧。wx.login(OBJECT)调用接口获...
    99+
    2023-06-26
  • 微信小程序怎么在app.json添加页面
    微信小程序在app.json添加页面配置的方法:微信小程序中的每一个页面的“路径+页面名”都要写在app.json的pages中。并且按照顺序打开,排在第一的页面就是初始页面。例如:"pages":["page...
    99+
    2024-04-02
  • 微信小程序怎么设置初始页面
    微信小程序设置初始页面方法:在app.json文件中,找到pages数组,设置在第一个的页面就是默认启动页面,因此需要调整你当前开发的页面顺序即可。在提交正式版本的时候,“配置功能页面”的一步,在功能页面一栏里,选择需要设置初始页面即可。在...
    99+
    2024-04-02
  • 微信小程序怎么动态更新页面
    微信小程序动态更新页面的案例:wxml代码: <swiper indicator-dots="{{true}}"  current="{{currentindex}...
    99+
    2024-04-02
  • 微信小程序页面地址怎么查看
    查看微信小程序页面地址的方法:运行小程序开发工具。打开小程序项目。选择并打开需要查看地址的页面文件。在开发工具模拟器底部,有显示“页面路径”以及“页面参数”。...
    99+
    2024-04-02
  • 微信小程序页面怎么实时刷新
    微信小程序页面实时刷新的案例:在wxml文件中插入view标签并绑定变量。<view class="num"><view>{{num}}</view></view>...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作