更新记录
1.0.1(2026-08-20)
下载此版本
1.0.0(2026-08-20)
下载此版本
- 支持文本生成二维码。
- 支持 canvas2d 和 view 两种渲染模式。
- 支持自定义颜色、中心图片、图片导出及保存。
- 支持微信小程序、H5 和 App-Vue。
平台兼容性
uni-app(5.01)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| × |
√ |
√ |
√ |
√ |
- |
- |
- |
- |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| √ |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
uni-app x(5.01)
| Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
| - |
- |
- |
- |
- |
- |
其他
yl-qrcode
不依赖第三方运行时的 uni-app 二维码组件,支持 Vue 3、微信小程序、H5 和 App-Vue。组件提供 canvas2d 与 view 两种展示模式,两种模式均可导出图片和保存。
在弹窗中推荐使用 view 模式,以避免二维码显示有问题。如要使用 canvas2d 模式,需要在弹窗打开后且在nextTick中调用 remake 方法,否则二维码显示有问题。
......
popup.value.open();
nextTick(() => {
qrcodeRef.value?.remake()
})
......
基础用法
<template>
<yl-qrcode
ref="qrcodeRef"
value="https://example.com"
size="400rpx"
margin="2"
mode="canvas2d"
color="#1677ff"
image="/static/logo.png"
image-size="80rpx"
@complete="handleComplete"
@error="handleError"
/>
</template>
<script setup>
import { ref, nextTick } from 'vue'
const qrcodeRef = ref(null)
const saveQrcode = async () => {
try{
await qrcodeRef.value.save()
uni.showToast({
title: '保存成功',
icon: 'success'
})
}catch(error){
uni.showToast({
title: '保存失败',
icon: 'error'
})
}
}
const handleComplete = result => {
console.log(result)
}
const handleError = error => {
console.error(error.message)
}
/**
* 注意事项:在弹窗中使用时(或将二维码组件放在新创建的dom中),需要在弹窗打开后调用 `remake` 方法,否则二维码显示有问题。
* 打开二维码窗体并重新生成二维码
*/
const openPopup = () => {
popup.value.open();
nextTick(() => {
qrcodeRef.value?.remake()
})
}
</script>
easycom 开启时无需手动导入组件;组件名为 yl-qrcode。
Props
| 参数 |
类型 |
默认值 |
说明 |
value |
String / Number |
'' |
二维码文本,不能为空 |
size |
String / Number |
200rpx |
显示尺寸,支持数字、px、rpx |
mode |
String |
canvas2d |
渲染模式:canvas2d 或 view |
color |
String |
#000000 |
深色模块颜色,支持 HEX、RGB、RGBA |
background-color |
String |
#ffffff |
背景颜色,支持 HEX、RGB、RGBA |
margin |
String / Number |
4 |
四周留白的模块数量 |
error-correct-level |
String |
M |
纠错等级:L、M、Q、H;传入中心图时强制使用 H |
image |
String |
'' |
中心图片的本地绝对路径、临时路径或 HTTPS 地址 |
image-size |
String / Number |
自动计算 |
中心图片尺寸;为保护识别率,图片和安全区总宽度最多为二维码的 24% |
auto |
Boolean |
true |
props 变化后是否自动重新生成 |
start |
Boolean |
true |
组件挂载后是否立即生成 |
file-type |
String |
png |
导出格式:png、jpg、jpeg |
h5-download-name |
String |
qrcode |
H5 下载文件名,不含扩展名 |
h5-save-tip |
Boolean |
true |
H5 保存后是否展示长按保存提示层 |
为了确保跨端 canvas 能正确识别颜色,color 和 background-color 不接受 CSS 变量或命名颜色。
实例方法
所有异步方法均返回 Promise,并兼容 success、fail、complete 回调。
await qrcodeRef.value.make()
qrcodeRef.value.save({
success: result => console.log(result),
fail: error => console.error(error),
complete: result => console.log(result),
})
| 方法 |
返回值 |
说明 |
make(options?) |
Promise |
生成二维码 |
remake(options?) |
Promise |
强制重新生成二维码 |
toTempFilePath(options?) |
Promise<{ tempFilePath }> |
导出当前二维码图片;支持 fileType、quality |
save(options?) |
Promise |
小程序/App 保存到相册,H5 触发下载 |
getMatrix() |
Boolean[][] |
获取当前二维码矩阵的副本 |
未成功生成二维码时,toTempFilePath() 和 save() 会返回 rejected Promise。
事件
| 事件 |
参数 |
说明 |
complete |
{ success, moduleCount?, size?, errorCorrectLevel?, errMsg? } |
每次生成完成 |
error |
Error |
生成、图片加载、导出或保存失败 |
save |
保存结果 |
保存或 H5 下载已触发 |
click |
Event |
点击二维码区域 |
平台说明
- 微信小程序使用新版 Canvas 2D 节点;网络中心图需要在小程序后台配置合法 download 域名。
- H5 的
save() 会触发浏览器下载,并可展示二维码图片供移动端长按保存。Web 平台无法保证图片直接进入系统相册。
- App 支持 App-Vue 页面,通过 uni-app canvas API 绘制和导出;当前组件不支持 nvue 页面。
- 小程序和 App 的相册权限由系统管理。组件不会自动打开权限设置页,拒绝权限时会原样返回失败。
view 模式只负责页面展示,导出和保存会由组件内部离屏 canvas 合成相同内容。
许可
组件内置的 QR 编码核心基于 Kazuhiko Arase 的 QR Code Generator(MIT License),源码及许可声明位于 components/yl-qrcode/vendor/qrcode-generator.js。