记一次关于二维码分享踩坑

前提条件:

预期结果:

我在项目内部加了一个扫码功能,项目外部也会配置二维码规则,可以跳转到小程序内部,扫码后跳到对应结果页面。

实际结果:

我从微信扫一扫进入小程序,第一次跳到结果页面。然后从小程序内部再打开扫码功能,但是没有进行扫码操作,只是打开了扫码工具。返回时,会再一次进入上一次扫码结果页。

原因:

App场景值 1001,为扫描二维码的场景值。内部扫码和外部扫码的场景值都是1011,我监听到的e.query里的值还是原来的值,也就是没有进行更新和删除的操作。微信官方没有对内部扫码和外部扫码的场景值进行区分。

解决方案:

使用getApp().globalData.isScanFail=true进行一个全局变量的定义,在内部扫码scanCode的complete或者fail中添加全局变量,然后app.vue监听的时候加入判断,如果有这值,则不会再次进入结果页。

内部扫码 scanCode.vue:

      uni.scanCode({
        onlyFromCamera: false,
        success: function (res) {
          console.log('条码类型:' + res.scanType);
          console.log('条码内容:' + res.result);
          base.joinscan(res.result);
        },
        complete: function (res) {
          uni.showLoading({
            title: '识别中...',
          });
          setTimeout(function () {
            uni.hideLoading();
          }, 2000);
        },
        fail: function (res) {
        //添加扫码失败监听全局变量
          getApp().globalData.isScanFail = true;
          setTimeout(function () {
            uni.hideLoading();
          }, 2000);
        },
      });

外部扫码监听app.vue

        console.log('跳到扫码失败页面', res.message);
          // 获取当前路由,已经处于扫码失败页面,跳过此处判断
          let datat = {
            message: res.message,
          };
            //判断全局变量,扫码失败监听结果判断
          if(this.globalData.isScanFail) {
            this.flagtarget('pages/home/home', {});
          } else {
          this.flagtarget('pages/scanFaceTag/scanFail', datat);
          }

记得要在app.vue里进行全局变量定义,和onload,method同级呦!


  globalData: {
    isScanFail: false,
  },
//和method同级

 

如果有帮助到你,可以给我一颗小心心吗~

猜你喜欢

转载自blog.csdn.net/weixin_38791717/article/details/110224695
今日推荐