收藏
回答

小程序生命周期太有问题了?

这里有个微信小程序的问题问问大家-------------------app生命周期onlaunch和页面生命周期是异步的,页面的onload和onshow也是异步的。导致需要在onlaunch或者onload中获取参数后,onshow中不一定能调用到最新的参数。这种问题该如何解决呢。。。。特别是鉴权,每个页面都要鉴权一次,不像vue那样有个路由守卫

回答关注问题邀请回答
收藏

2 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    04-23

    1、如大佬ʚ青哥ɞ所说,封装request

    2、或者重写页面onLoad试试

    // /utils/overWrite.js
    const myPage = Page
    Page = function (e) {
      let { onLoad } = e
      e.onLoad = (() => {
        return function (res) {
          // 各页面公共前置代码写在这里
          // your code here
    
    
          // this为页面实例
          console.log('overWrite onLoad:', res, this)
          onLoad && onLoad.call(this, res)
        }
      })()
      return myPage.call(this, e)
    }
    ===============================
    // app.js 中引入overWrite.js
    require('./utils/overWrite.js')
    App({
      onLaunch: function () {
    
      }
    })
    
    

    若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人

    04-23
    有用 2
    回复 2
    • ZzP
      ZzP
      04-23
      我觉得还是统一封装request合适点,这样需要修改只要修改一个点。重写onload需要修改每个页面的page,有点麻烦。。但是封装request也是麻烦的。。。毕竟所有调用接口都写在了onshow或者onload里面了。。。
      04-23
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      04-23回复ZzP
      页面级就重写Page,接口级就重写wx.request
      也有wx.onAppRoute,wx.onAppRouteDone不过都不能阻止页面加载

      https://developers.weixin.qq.com/s/z5QokOmV7vg0
      04-23
      回复
  • ʚ青哥ɞ
    ʚ青哥ɞ
    04-23

    页面的onload之后是onshow

    封装request统一鉴权

    04-23
    有用 1
    回复 6
    • ZzP
      ZzP
      04-23
      这个想法我觉得可以
      04-23
      回复
    • ZzP
      ZzP
      04-23
      可惜就是要大改
      04-23
      回复
    • ZzP
      ZzP
      04-23
      这个思路有点像axios里面的请求拦截器。。我想要一个路由拦截器。鉴权没通过就不加载那个页面
      04-23
      回复
    • ʚ青哥ɞ
      ʚ青哥ɞ
      04-23回复ZzP
      一样的呀,路由拦截器就把路由api封装起来。
      04-23
      回复
    • ZzP
      ZzP
      04-23回复ʚ青哥ɞ
      那在小程序里具体如何操作呢
      04-23
      回复
    查看更多(1)
登录 后发表内容
问题标签