收藏
回答

小程序首页onLoad之前生命周期?

项目需要在首页onLoad之前请求接口获得角色然后隐藏tabbar,请问首页onLoad之前有哪个生命周期?

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

8 个回答

  • Sunflower⁶₆⁶₆⁶₆
    Sunflower⁶₆⁶₆⁶₆
    2019-01-17

    有个笨方法   用计时器

    2019-01-17
    有用
    回复
  • 云天团
    云天团
    2019-01-17

    你可以在page 的 onload 中放一个 init 函数,页面所有初始化操作都在 init 里面来做。在 onload 的时,用个轮询,查询 app.globalData.inited, 当为 true 的时候调用 page.init

    2019-01-17
    有用
    回复
  • 烧饼
    烧饼
    2019-01-16

    顺序执行app.js -> (app.js)onLaunch -> app.js中App构造器之后的代码 ->顺序调用Page页面js文件、Component组件js文件中所有js代码(官方称注册页面、组件) -> 首页的onLoad......

    你这种情况,只考虑时序上的顺序的话,可以在appjs的App()外层先发起请求,然后请求结果挂载到wx全局变量中;或者在得到结果时getApp()查看是否已有app对象,有则挂靠到app中。在page的onLoad中检查是否已有该变量。没有的话就要考虑怎么拿到这个请求回调的事件了。若方案你觉得合适再给你交流。


    测试过很多次了,一个最简单的hello world小程序。从app.js文件中第一行执行到page.onLoad耗时平均60、70ms(模拟器)。有业务的话当然要慢很多。

    2019-01-16
    有用
    回复 5
    • Journey
      Journey
      2019-01-17

      若是我首页定义一个值与全局变量同步,那么onLaunch回调完成改变了这个值、那么我首页data中定义的值会与全局变量同步么

      2019-01-17
      回复
    • 烧饼
      烧饼
      2019-01-17回复Journey

      页面data中的值都是深复制过的,不会跟随引用的改变而更新。所以只能通过setData来。所以你的问题就只有App中的事件怎么能通知到页面里面,从而更新data了。这个的话,双方存一个callback就好了

      2019-01-17
      回复
    • Journey
      Journey
      2019-01-17回复烧饼

      具体该怎么实现。我是一个新手

      2019-01-17
      回复
    • 烧饼
      烧饼
      2019-01-17回复Journey

      https://developers.weixin.qq.com/s/3Ps4DumY7i5K


      楼主试试,就是一个思路,实现方式不优雅,但能用。


      对内存有要求的不建议常用,或者仔细调试内存,解决应用问题,避免可能的内存泄漏问题。

      2019-01-17
      1
      回复
    • 烧饼
      烧饼
      2019-01-17回复烧饼

      错字:解决引用问题

      2019-01-17
      1
      回复
  • 好哇你个狗东西
    好哇你个狗东西
    2019-01-16

    我之前有遇到过类似的需求,,做法是在onload中判断身份以后再处理tabbar,除非你是nasa的网速,否则一定来不及的。。。。ajax是异步的啊兄弟......第一次判断完用本地缓存存起来,第二次就不用依赖请求了,体验会稍微好一点,像你说的这个在页面加载之前处理,任何生命周期都不可能那么慢的~

    2019-01-16
    有用
    回复 5
    • Journey
      Journey
      2019-01-16

      有没有什么方法在onLaunch回调时给首页data赋值,

      2019-01-16
      回复
    • 好哇你个狗东西
      好哇你个狗东西
      2019-01-16回复Journey

      你好像还没整明白。。你是想要在onLoad之前操作页面内容,但是问题在于onLoad之前,页面的方法是不会执行的。所以就算你能传过去,你想做的事也没法执行。向页面传值的方法是用模块export输出一个引用,在页面和app内import同一个模块可以达到你想要的传值效果。当你在app内修改了模块的值时,页面内引用的同一模块的值也会变。

      2019-01-16
      回复
    • Journey
      Journey
      2019-01-16回复好哇你个狗东西

      我在想能不能在onLaunch回调后存一个全局变量。然后首页的data中定义一条数据与之同步。

      2019-01-16
      回复
    • 好哇你个狗东西
      好哇你个狗东西
      2019-01-16回复Journey

      可以,方法我上面说了。用一个模块,双方同时引用,onLaunch内修改它的值,页面中引用的值也会被修改,是全局同步的

      2019-01-16
      回复
    • 夏天来了
      夏天来了
      2019-01-17回复Journey

      是有办法的,去看下小程序中的redux方案就知道了。全局数据共享,onLaunch去触发改变数据,页面会同步更新。

      2019-01-17
      回复
  • 拾忆
    拾忆
    2019-01-16

    页面内有多个异步请求,你不管哪个先后执行,返回结果的顺序也不是固定的,所以如果要根据异步结果去判断页面的加载逻辑本身就是一个不合适的。

    2019-01-16
    有用
    回复 1
    • Journey
      Journey
      2019-01-16

      但项目有这样的需求也没办法。要登录然后判断角色隐藏tab

      2019-01-16
      回复
  • Journey
    Journey
    2019-01-16

    但首页的onLoad的请求会比onLaunch先执行。该怎么办

    2019-01-16
    有用
    回复 14
    • 2019-01-16

      不是onLoad会比onLaunch先执行,而是小程序onLaunch只在首次运行时才执行,而且全局应该就这一次

      2019-01-16
      回复
    • 卢霄霄
      卢霄霄
      2019-01-16

      onLaunch的请求回调,比onLoad开始执行要慢,这很正常嘛~ 非要规避,就加个引导页面 欢迎页面之类的。。或者默认隐藏tabbar,判断有了再显示

      2019-01-16
      回复
    • 2019-01-16

      app.js里面写不行吗

      2019-01-16
      回复
    • Journey
      Journey
      2019-01-16回复

      我知道。但onLaunch里的请求回调比首页onLoad慢,有什么方法可以让onLaunch的回调执行了在执行首页的onLoad里面的请求?

      2019-01-16
      回复
    • Journey
      Journey
      2019-01-16回复卢霄霄

      有什么方法可以让onLaunch的回调执行之后再执行首页onLoad里面的请求吗?

      2019-01-16
      回复
    查看更多(9)
  • 2019-01-16

    一般页面的最初始就是onLoad了,如果是整个小程序最初始,那么在onLoad之前有一个onLaunch的周期

    2019-01-16
    有用
    回复
  • 卢霄霄
    卢霄霄
    2019-01-16

    隐藏tabbar。。如果你是用的小程序默认的tabbar,那就没有更快的生命周期了,如果是自定义tabbar,就在onLaunch的时候判断啊

    2019-01-16
    有用
    回复
登录 后发表内容