前提条件:
预期结果:
我在项目内部加了一个扫码功能,项目外部也会配置二维码规则,可以跳转到小程序内部,扫码后跳到对应结果页面。
实际结果:
我从微信扫一扫进入小程序,第一次跳到结果页面。然后从小程序内部再打开扫码功能,但是没有进行扫码操作,只是打开了扫码工具。返回时,会再一次进入上一次扫码结果页。
原因:
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同级
如果有帮助到你,可以给我一颗小心心吗~