收藏
回答

小程序支付完成后会重新执行app.onShow导致option丢失的问题

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 Bug 微信iOS客户端 7.0.8 1.9.97

现有产品需求是进入小程序必须扫码进入(小程序码里需要携带vin参数以此判断显示内容)

在app.onShow方法里有option参数可以通过option.query.vin拿到然后存储在globalData里。

但是在页面中调起小程序支付功能后会重新执行app.onShow方法,此时app.onShow方法的option参数里是没有携带vin参数的,导致显示内容无法判断。

代码片段如下:

//app.js

onShow(option){

     let op = option;
      //车辆VIN

     if (op.query.scene.vin) {//扫码进来带有vin参数则赋值

         this.globalData.vin = op.query.scene.vin

      }else{//没有vin则提示客户需扫码且清空vin以免下次非扫码进入的时候带有上次扫码进来时缓存的vin
        this.globalData.vin = '';//
}
}

小程序中调起支付后op.query.scene中是没有任何参数的,这时候返回到页面中刷新数据没有vin参数导致内容显示不正确

最后一次编辑于  2019-12-09
回答关注问题邀请回答
收藏

2 个回答

  • 罗梅光
    罗梅光
    2019-12-06

    option放在onLoad可以解决问题嘛,一般都是放在onLoad里面。

    2019-12-06
    有用
    回复 5
    • Jinn
      Jinn
      2019-12-06
      onLoad里面只会执行一次,下次再扫另一个码打开的时候不行覆盖掉之前的VIN。导致请求的数据永远一样
      2019-12-06
      回复
    • 罗梅光
      罗梅光
      2019-12-06回复Jinn
      必须扫码进入小程序,onShow如果options没有参数肯定是从其他地方进来的,这个判断可以解决嘛
      2019-12-06
      回复
    • Jinn
      Jinn
      2019-12-06回复罗梅光
      不行,因为支付完成后onShow的options也没有参数。没有餐能输我会认为不是扫码进入的。这样就导致支付一下后续业务接口就没法运营了
      2019-12-06
      回复
    • 罗梅光
      罗梅光
      2019-12-09回复Jinn
      把扫码进来的参数放在本地缓存中,判断或用到缓存的时候就取缓存,不需要或者页面卸载的时候再去清除,这样可行吗
      2019-12-09
      回复
    • Jinn
      Jinn
      2019-12-09回复罗梅光
      不行,因为非正常退出小程序缓存删不了,比如直接把APP划走或者闪退啊等等。这样下次进来就还是不对
      2019-12-09
      回复
  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2019-12-06

    onShow(option){

        let op = option;

        //车辆VIN

        if (op.query.scene.vin) {// 扫码会进入这里(支付成功后返回不会进入这里)

            //扫码进来带有vin参数则赋值

            this.globalData.vin = op.query.scene.vin;

        } else if (!this.globalData.vin) {// 支付成功后返回也不会进入这里

            // 如果是非扫码进小程序,则会进入这里

            //进入这里,则会提示客户需扫码

        } else {//支付成功后返回,this.globalData.vin还是刚才扫码的vin,所以会进入这里

            //支付完成后续显示问题解决啦

        }

    }


    2019-12-06
    有用
    回复 15
    • Jinn
      Jinn
      2019-12-06
      如果不执行vin = ''的话则下次普通进入小程序会默认有vin(缓存),需求是必须扫码进入且携带vin
      2019-12-06
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2019-12-06回复Jinn
      小程序在后台运行,globalData.vin会有值,冷启动globalData.vin不会有值
      2019-12-06
      回复
    • Jinn
      Jinn
      2019-12-06回复o0o有脾气的酸奶
      需求是必须扫码进入,已经发正式版测过,直接非扫码进会携带vin缓存
      2019-12-06
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2019-12-06回复Jinn
      冷启动不会有缓存的
      你现在不就是要要解决这个【在页面中调起小程序支付功能后会重新执行app.onShow方法,此时app.onShow方法的option参数里是没有携带vin参数的,导致显示内容无法判断】问题吗


      调起支付页面支付成功,小程序此时是在后台运行的,支持成功返回,小程序从后台切到前台显示,所以触发app.onShow,这不属于冷启动,globalData.vin还是有值的,这不解决问题了,globalData.vin的值还是和扫码进入时的一样,数据不会有什么问题


      如果你扫码后,关掉或杀掉小程序程序,再直接非扫码进入,globalData.vin是不存在值的
      2019-12-06
      回复
    • Jinn
      Jinn
      2019-12-06回复o0o有脾气的酸奶
      小程序从后台切到前台显示globalData.vin确实还有值,但是它还是会走app.onShow方法 里面我写了vin = ''.如果不写vin=''则非扫码进入就会有缓存
      2019-12-06
      回复
    查看更多(10)
登录 后发表内容
问题标签