更新记录
0.0.1(2021-08-09)
下载此版本
- 符合uni_modules规范的二维码生成
- 对使用进行详细说明
平台兼容性
App |
快应用 |
微信小程序 |
支付宝小程序 |
百度小程序 |
字节小程序 |
QQ小程序 |
HBuilderX 3.1.0 app-vue |
× |
√ |
√ |
√ |
× |
√ |
钉钉小程序 |
快手小程序 |
飞书小程序 |
京东小程序 |
× |
× |
× |
× |
H5-Safari |
Android Browser |
微信浏览器(Android) |
QQ浏览器(Android) |
Chrome |
IE |
Edge |
Firefox |
PC-Safari |
√ |
√ |
√ |
√ |
√ |
× |
√ |
√ |
√ |
wxy-code
项目需要二维码功能,开始是使用uQRCode 二维码生成插件,需要自己处理图片显示,而且调用比较麻烦,后来参考了二维码生成器
进行了封装,一个是转化为uni_modules规范,二是对代码进行了优化,三是补充了调用示例代码,解决了使用$refs调用makeCode方法是提示未定义的错误,二维码生成有两种方式:
- 组件方式:使用onval或loadMake属性来监视内容变化,简单需求推荐组件方式
- $refs方式:调用组件的makeCode方法,此时切记若是提示未定义,就需要将调用代码放置在
this.$nextTick
中即可解决问题
主要功能介绍
- H5、微信小程序、支付宝小程序、APP,其它平台的小程序没有测试
- 使用canvas生成
- 可设置二维码背景色,前景色,角标色
- 可设置二维码logo
示例代码
- 场景一:页面加载即显示(固定文本)
<wxy-code val="cls20201090123" loadMake></wxy-code>
- 场景二:页面加载即显示(文本变量)
<!-- 方法一:在onLoad中一定要使用this.$nextTick来改变,使用onval或loadMake都可以,因为$nextTick是在组件挂载mouted之前 -->
<wxy-code :val="val" loadMake></wxy-code>
<script>
export default {
data() {
return {
val: '',
};
},
onLoad(options) {
this.$nextTick(()=>{
this.val = options.qrcode;
})
},
};
<!-- 方法二:在onReady中改变,只能用onval,因为onReady是在组件挂载mouted之后 -->
<wxy-code :val="val" onval></wxy-code>
<script>
export default {
data() {
return {
val: '',
};
},
onReady:function(){
this.val=this.qrcode;
},
onLoad(options) {
this.qrcode = options.qrcode;
},
};
- 场景三:弹窗组件中显示二维码
说实在话,这也是测试花费时间最多的地方,上面两个官方插件市场中在这方面感觉未作详细说明,下面示例使用的是弹窗组件wxy-popup
<!-- 组件方式,要注意APP和H5要用loadMake,而小程序则要用onval -->
<template>
<wxy-page>
<view class="code" style="margin-top:30vh;">
<button type="default" @click="btnPopCode">弹窗生成二维码</button>
</view>
<wxy-popup v-model="show" mode='center'>
<!-- #ifdef MP -->
<wxy-code :val="popval" onval></wxy-code>
<!-- #endif -->
<!-- #ifndef MP -->
<wxy-code :val="popval" loadMake></wxy-code>
<!-- #endif -->
</wxy-popup>
</wxy-page>
</template>
<script>
export default {
data() {
return {
val: '',
show: false,
};
},
methods: {
btnPopCode:function(){
this.val='cls2020090712789';
this.show=true;
},
}
};
</script>
<!-- $refs方式,makeCode要放在$nextTick回调函数中才可以 -->
<template>
<wxy-page>
<view class="code" style="margin-top:30vh;">
<button type="default" @click="btnPopCode">弹窗生成二维码</button>
</view>
<wxy-popup v-model="show" mode='center'>
<wxy-code ref='qrcode' :val="val" ></wxy-code>
</wxy-popup>
</wxy-page>
</template>
<script>
export default {
data() {
return {
val: '',
show: false,
};
},
methods: {
btnPopCode:function(){
this.val='cls2020090712789';
this.$nextTick(()=>{
this.$refs.qrcode.makeCode();
});
this.show=true;
},
}
};
</script>
属性
属性名 |
类型 |
默认值 |
可选值 |
说明 |
cid |
String |
wxy-code-canvas |
|
canvasId,页面存在多个二维码组件时需设置不同的ID |
size |
Number |
200 |
|
生成的二维码大小 |
unit |
String |
upx |
px |
大小单位尺寸 |
show |
Boolean |
true |
|
默认使用组件中的image标签显示二维码 |
val |
String |
二维码 |
|
要生成的内容 |
background |
String |
#000000 |
|
二维码背景色 |
foreground |
String |
#ffffff |
|
二维码前景色 |
pdground |
String |
#ffffff |
|
二维码角标色 |
icon |
String |
|
|
二维码图标URL(必须是本地图片,网络图需要先下载至本地) |
iconSize |
Number |
40注意此大小不会跟随二维码size 动态变化,设置时需注意大小,不要太大,以免无法识别 |
|
二维码图标大小 |
lv |
Number |
3(一般不用设置) |
|
容错级别 |
onval |
Boolean |
false |
|
监听val值变化自动重新生成二维码 |
loadMake |
Boolean |
false |
|
组件初始化完成后自动生成二维码,val需要有值 |
usingComponents |
Boolean |
true |
false |
是否使用了自定义组件模式(主要是为了修复非自定义组件模式时 v-if 无法生成二维码的问题) |
showLoading |
Boolean |
true |
false |
是否显示loading |
loadingText |
String |
二维码生成中 |
|
loading文字 |
方法
方法名 |
参数 |
默认值 |
说明 |
makeCode() |
|
|
生成二维码 |
clearCode() |
|
|
清空二维码(清空二维码会触发result回调 返回值为空) |
saveCode() |
|
|
保存二维码到图库 |
事件
事件名 |
返回值 |
说明 |
result |
生成的图片base64或图片临时地址 |
返回二维码路径 注:_clearCode()后返回空 |
最后要感谢原作者的分享