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
在使用 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);
}
});