组件推荐
我们在用 uni-app 开发前端时,有时会用到条形码或者二维码,甚至一个页面同时用到条形码和二维码。笔者推荐使用以下两个组件:
uni-app 条形码生成器:barcode 源码和文档说明
uni-app 二维码生成器:qrcode 源码和文档说明
不过,有点小小的遗憾,这两个组件存在一些不完美的地方。笔者进行了一些优化,并修复了在支付宝小程序中使用无法刷新条形码的问题。大家也可以直接下载笔者优化后的文件(uniapp条形码和二维码生成器.zip),解压后(条形码:tki-barcode、二维码:tki-qrcode)放在 components 文件夹下。
使用方式
自定义组件
自定义一个组件,代码如下:
<template>
<view class="component text-center">
<view class="component-title">条形码和二维码混用</view>
<view class="component-code">
<tki-barcode
ref="barcode"
onval
:val="code"
:load-make="true"
:opations="barOpations"/>
</view>
<view class="component-qr">
<tki-qrcode
ref="qrcode"
onval
:val="code"
:size="250"
:load-make="true"
:show-loading="false"/>
</view>
<view class="coupon-no-view">
<text>编号:</text>
<text class="coupon-no">{{ code }}</text>
</view>
</view>
</template>
<script>
import tkiBarcode from '@/components/tki-barcode/tki-barcode'
import tkiQrcode from '@/components/tki-qrcode/tki-qrcode'
export default {
components: {
tkiBarcode,
tkiQrcode
},
data() {
return {
code: '',
barOpations: {
height: 150,
displayValue: false
}
}
},
methods: {
init () {
this.code = '1234567890' // 生成一维码和二维码
setTimeout(() => {
this.code = '0987654321' // 5 秒后刷新一维码和二维码
}, 5000)
}
}
}
</script>
<style lang="scss" scoped>
.component {
border-radius: 16rpx;
overflow: hidden;
display: flex;
flex-direction: column;
background: #FFFFFF;
flex: 1;
margin: 64rpx;
padding: 64rpx 32rpx;
&-title {
max-height: 112rpx;
font-size: 40rpx;
font-weight: 600;
line-height: 56rpx;
overflow: hidden;
}
&-code {
height: 150rpx;
margin: 32rpx 32rpx 0;
}
&-qr {
height: 250rpx;
margin-top: 36rpx;
}
.coupon-no-view {
margin: 0 18rpx;
height: 76rpx;
border-radius: 8rpx;
border: 2px solid #F5F5F5;
display: flex;
align-items: center;
padding: 0 24rpx;
margin-top: 36rpx;
text {
font-size: 24rpx;
font-weight: 400;
&:first-child {
color: #999999;
}
}
.coupon-no {
flex: 1;
text-align: left;
}
}
}
</style>
使用自定义组件
在需要使用这个组件的地方引入使用,并在 onLoad 或其他需要使用一维码/二维码的方法中直接调用 init,如下:
export default {
onLoad(option){
this.$nextTick(() => {
this.$refs['code'].init()
})
}
}
最终效果图如下:
版权属于:瞭月
本文链接:https://www.lervor.com/archives/113/
版权声明:本文为瞭月原创文章,转载请附上原文出处链接和本声明。
18 条评论
作者大大有个问题 如果条形码 输入的够长 他会超出 屏幕 请问这个有什么办法可以解决呢 让他一直处于居中
修改组件‘tki-barcode.vue’代码,第9行‘image’图片样式‘style’和‘.tki-barcode-canvas’增加‘max-width: 100%;’
组件里要加code文件夹码
因为只是个示例,没有写的很具体。比如自定义组件的路径是 components/biz-code.vue ,在使用的地方可以直接使用 <template><view><biz-code ref="code" /></view></template> ,码的内容可以自行改造成通过 props 或者函数参数传递
条形码只能用数字生成码?我用链接去生成就报错了
条形码只支持英文、数字、和一些常规符号,其它的会报错。非要生成中文或其它符号的话需要转换为unicode码
导入这个自定义组件导时候为啥报:Cannot read property 'init' of undefined"
能指导一下为什么吗?在使用这个自定义组件导时候该如何去导入
跟导入其他组件一样,比如自定义组件放在 components/my-code/my-code.vue,需要使用的地方直接使用 。如果不支持 easycom 组件模式,可以通过 import 方式引入组件,在 components 选项中定义后再使用。
遇到了同样问题请问怎么解决
是说链接报错还是导入组件报错?
uniapp组件a使用了tki-barcode组件,同一个页面需要生成多个条形码(同时只显示一个),我只使用了一个该组件,通过改变value值来生成条形码,为什么多次显示隐藏会出现条形码模糊的情况
如果只使用了一个该组件,不需要通过显示隐藏来切换条形码,直接改变code的值就可以了。
我这边改变value值,条形码不变
直接改code,如:上面例子中的 this.code = '1234567890'