uni-app 官方 barcode 组件示例代码有bug,不进任何回调也不输出任何结果

uni-app 官方 barcode 组件示例代码有bug,不进任何回调也不输出任何结果

开发环境 版本号 项目创建方式
Windows windows10 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:windows10

HBuilderX类型:正式

HBuilderX版本号:3.96

手机系统:Android

手机系统版本号:Android 13

手机厂商:小米

手机机型:红米k40s

页面类型:nvue

vue版本:vue2

打包方式:云端

项目创建方式:HBuilderX

### 示例代码:

```html
<template>  
    <view>  
        <barcode id='1' class="barcode" autostart="true" ref="barcode" background="rgb(0,0,0)" frameColor="#1C86EE" scanbarColor="#1C86EE" :filters="fil" @marked="success1" @error="fail1"></barcode>  
        <button class="btn" @click="toStart">开始扫码识别</button>  
        <button class="btn" @click="tocancel">取消扫码识别</button>  
        <button class="btn" @click="toFlash">开启闪光灯</button>  
        <button class="btn" @click="toscan">预览</button>  
    </view>  
</template>  

<script>  
    export default {  
        onLoad() {  

        },  
        data() {  
            return {  
                fil: [0, 2, 1]  
            }  
        },  

        methods: {  
            success1(e) {  
                console.log("success1:" + JSON.stringify(e));  
            },  
            fail1(e) {  
                console.log("fail1:" + JSON.stringify(e));  
            },  
            toStart: function() {  
                this.$refs.barcode.start({  
                    conserve: true,  
                    filename: '_doc/barcode/'  
                });  
            },  
            tocancel:function(){  
                this.$refs.barcode.cancel();  
            },  
            toFlash: function() {  
                this.$refs.barcode.setFlash(true);  
            },  

            toscan: function() {  
                console.log("scan:");                 
                const barcodeModule = uni.requireNativePlugin('barcodeScan');  
                barcodeModule.scan("/static/barcode1.png"  
                ,(e)=>{  
                    console.log("scan_error:"+JSON.stringify(e));  
                });  
            }  
        }  
    }  
</script>  

<style>  
    .barcode {  
        width: 750rpx;  
        height: 700rpx;  
        background-color: #808080;  
    }  

    .btn {  
        top: 20rpx;  
        width: 730rpx;  
        margin-left: 10rpx;  
        margin-top: 10rpx;  
        background-color: #458B00;  
        border-radius: 10rpx;  
    }  
</style>

操作步骤:

已向 /static 目录下放置过名为 barcode1.png 的二维码图片

预期结果:

应返回对应的扫码结果或 err 提示

实际结果:

未进入任何回调,也没有返回任何结果,也没有任何报错

bug描述:

使用官方 Barcode 组件,toscan 方法无任何返回值,既不进 err 回调,也不进 @marked,也不进 @error

1 回复

在使用 uni-app 官方提供的 barcode 组件时,如果遇到无法进入回调或没有输出结果的问题,可能是由于多种原因导致的。以下是一些可能的原因及解决方法:

1. 检查权限

确保你的应用已经获得了摄像头权限。在 manifest.json 文件中,确保已经添加了摄像头权限:

"permission": {
    "scope.userLocation": {
        "desc": "你的位置信息将用于小程序位置接口的效果展示"
    },
    "scope.camera": {
        "desc": "你的摄像头将用于小程序扫码接口的效果展示"
    }
}

2. 检查组件使用

确保你正确使用了 barcode 组件。以下是一个简单的示例:

<template>
    <view>
        <barcode @scanned="onScanned"></barcode>
    </view>
</template>

<script>
export default {
    methods: {
        onScanned(res) {
            console.log('Scanned result:', res);
        }
    }
}
</script>

3. 检查回调函数

确保你定义的 onScanned 回调函数是正确的,并且没有被其他代码覆盖或错误地调用。

4. 检查设备支持

确保你的设备支持扫码功能,并且摄像头正常工作。你可以尝试在其他设备上运行代码,看看是否正常工作。

5. 调试输出

如果仍然没有输出结果,可以尝试在 barcode 组件的生命周期中添加一些调试输出,看看组件是否正确加载:

mounted() {
    console.log('Barcode component mounted');
}

6. 更新 uni-app 版本

确保你使用的是最新版本的 uni-app。旧版本可能存在一些已知的 bug,更新到最新版本可能会解决问题。

7. 查看官方文档和社区

如果以上方法都无法解决问题,建议查看 uni-app 的官方文档和社区,看看是否有其他开发者遇到类似问题,并找到解决方案。

8. 使用其他扫码插件

如果 barcode 组件仍然无法正常工作,你可以尝试使用其他扫码插件,例如 uni.scanCode API:

uni.scanCode({
    success: function (res) {
        console.log('Scan result:', res.result);
    },
    fail: function (err) {
        console.error('Scan failed:', err);
    }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!