# QRCode 二维码 
组件是超级强大的二维码生成功能,可扩展性高。自定义二维码样式,如随机颜色、圆点、方块、块与块之间的间距等,具体下方有说明。
此组件源于开源的优秀作品uQRCode (opens new window),uv-ui
只做了部分优化。本文档只对uni-app
组件方式等重要的功能进行介绍,如果需要原生方法或更详细的说明,请参考uQRCode官方文档 (opens new window)。
# 平台兼容性
App(vue) | App(nvue) | H5 | 小程序 | VUE2 | VUE3 |
---|---|---|---|---|---|
√ | √ | √ | √ | √ | √ |
注意事项
为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。
- 在
nvue
中使用该组件,会有报错提示reportJSException >>>> exception function:gcanvas setBackGround for android view, exception:WX_RENDER_ERR_TEXTURE_SETBACKGROUND: TextureView doesn't support displaying a background drawable!
。 该报错完全不影响使用,是因为weex
中使用gcanvas
的BUG,只要用到gcanvas都会有,不影响应用,可以无视。 options
属性设置size属性暂时不生效,直接在组件上设置size即可<uv-qrcode size="300" ...
。- nvue本地运行有二维码,打包后没有二维码,解决方案参考:nvue打包后生成失败 (opens new window)
# 基本使用
二维码默认尺寸为 200px
,可以根据设置 size
进行调整。下面有更多参数说明。
<template>
<view>
<uv-qrcode ref="qrcode" size="300px" value="https://h5.uvui.cn"></uv-qrcode>
</view>
</template>
# 自定义样式
二维码配置选项,可以配置data
、size
、margin
等参数,具体参考下方参数说明。
<template>
<view>
<uv-qrcode ref="qrcode" value="https://h5.uvui.cn" :options="options2"></uv-qrcode>
</view>
</template>
<script>
export default {
data() {
return {
options2: {
data: 'https://www.uvui.cn',
size: 300,
useDynamicSize: false,
errorCorrectLevel: 'Q',
margin: 10,
areaColor: "#F95F6B",
backgroundColor: "#3c9cff",
// 指定二维码前景,一般可在中间放logo
foregroundImageSrc: 'https://www.uvui.cn/common/logo.png'
}
}
}
}
</script>
# 自定义风格
通过内置 registerStyle
方法进行注册扩展插件,组件仅支持注册type为style的drawCanvas扩展,具体参考下方说明。
下载更多风格的模板,可以到uQRCode官方-风格下载 (opens new window) 。
温馨提示:options
配置中的 style
与插件标识对应上,比如示例中的 style: 'round'
,round
即是标识。
<template>
<view>
<uv-qrcode ref="qrcode" value="https://h5.uvui.cn" :options="options3"></uv-qrcode>
</view>
</template>
<script>
import QRCodeStyleRound from './uqrcode.plugin.round.es.js';
export default {
data() {
return {
options3: {
style: 'round',
// 指定二维码前景,一般可在中间放logo
foregroundImageSrc: 'https://www.uvui.cn/common/logo.png'
}
}
},
onReady() {
/* 注册扩展插件 */
this.$refs.qrcode.registerStyle(QRCodeStyleRound); // qrcode为组件的ref名称
}
}
</script>
# 完整示例
# API
# QRCode Props
参数 | 说明 | 类型 | 默认值 | 可选值 |
---|---|---|---|---|
value | 二维码内容 | String | - | - |
options | 二维码配置选项 | Object | - | 参考uQRCode官方基本配置 (opens new window) |
size | 二维码尺寸,单位可以是px,rpx | String | Number | 200 | - |
fileType | 导出的文件类型 | String | png | png | jpg |
start | 是否初始化组件后就开始生成 | Boolean | true | true | false |
auto | 是否数据发生改变自动重绘 | Boolean | true | true | false |
hide | 隐藏组件 | Boolean | false | true | false |
type | canvas 类型,微信小程序默认使用2d,其他为normal | String | - | 2d | normal |
queue | 队列绘制,主要针对nvue端 | Boolean | false | true | false |
isQueueLoadImage | 是否队列加载图片,可减少canvas发起的网络资源请求,节省服务器资源 | Boolean | false | true | false |
loading | loading状态 | Boolean | true | true | false |
h5SaveIsDownload | H5保存即自动下载(在支持的环境下),默认false为仅弹层提示用户需要长按图片保存,不会自动下载 | Boolean | false | true | false |
h5DownloadName | H5下载名称 | String | uvQRCode | - |
h5SaveTip 1.0.3 | H5保存二维码时候是否显示提示 | Boolean | true | true | false |
# QRCode Methods
事件名 | 说明 | 使用方法 |
---|---|---|
make() | 生成二维码 | this.$refs.qrcode.make({ success: () => { console.log('生成成功'); }, fail: err => { console.log(err) } }); |
remake() | 重新生成二维码 | this.$refs.qrcode.remake({ success: () => { console.log('生成成功'); }, fail: err => { console.log(err) } }); |
toTempFilePath() | 导出临时文件路径。请在 complete 事件返回success=true后调用。 | this.$refs.qrcode.toTempFilePath({ success: (res) => { console.log(res); } }); |
save() | 保存二维码到本地相册。为了保证方法调用成功,请在 complete 事件返回success=true后调用。 | this.$refs.qrcode.save({ success: (res) => { console.log(res); } }); |
registerStyle() | 注册扩展插件,组件仅支持注册type为style的drawCanvas扩展。 | 参考上面的案例自定义风格。下载更多风格的模板,可以到uQRCode官方-风格 (opens new window) |
# QRCode Events
事件名 | 说明 | 回调参数 |
---|---|---|
@complete | 生成完成时触发 | { success: true | false } |
@click | 点击组件时触发 | - |
@change | 重绘时触发 | - |
# QRCode Slots
事件名 | 说明 |
---|---|
loading | 自定义加载中的提示内容 |