vue 项目中 自动生成 二维码

​ 最近在写一个vue项目,要求根据卡号可以自动生成一个二维码,并渲染在指定位置,因为第一次做类似业务,小编在网上找了找,发现了很多,具体起来主要用的就两种:

  1. QRcode
  2. vue-qr

vue-qr比QRcode功能多在可以在中间加logo,而且好像更方便一点,具体的 小编也没试,小编需要的二维码不需要那么 多骚操作,就选择了第一种,至于要写这篇博客的目的是为说一下,运用中遇到的问题及解决方法。

下面先介绍QRcode

vue里安装qrcodejs的npm包

npm install qrcodejs2  -save     -s  // 上线需要的包,打包的时候也会打包

页面引用

import QRCode from 'qrcodejs2'    //   直接在需要用的页面 写就行不需要注意路径问题

二维码展示的盒子

<div class="qrcode" ref="qrCodeUrl" id="qrcode"></div>
methods: {creatQrCode() {var qrcode = new QRCode(this.$refs.qrCodeUrl, {  // 这里选择器也可以直接写 'qrcode' 用的是id选择器   指示不需要带 # 而已text: 'xxxx',  //  生成二维码的 内容width: 100,    //  宽   单位 pxheight: 100,   //  高   单位 px // render: 'canvas' // 设置渲染方式(有两种方式 table和canvas,默认是canvas)  // background: '#f0f'  // foreground: '#ff0'  correctLevel: QRCode.CorrectLevel.H   // 二维码容错 级别})}
},mounted() {this.creatQrCode(); // 这里会是一个重点,下面会解释}

点击下载二维码:

 // 点击下载app二维码downloadAppCodeImg (name) {var canvasData = this.$refs.qrcode.getElementsByTagName('canvas')var a = document.createElement("a");var event = new MouseEvent("click"); // 创建一个单击事件a.href = canvasData[0].toDataURL("image/png");;a.download = "drcQrcode";a.dispatchEvent(event); // 触发a的单击事件},

好了,现在就可以了 简单吧? 当然这只是正常的情况,也是官网上介绍的用法,实际上 ,你会遇到一个错误例如:

### vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in v-on handler: "TypeError: Cannot read property 'appendChild' of null"### found in### ---> <Home> at src/script/view/home.vue###   <ScrollBar> at src/script/component/scroll_bar.vue###  <Frame> at src/script/component/frame.vue### <App> at src/script/App.vue### <Root>
### warn @ vue.runtime.esm.js?2b0e:619
### logError @ vue.runtime.esm.js?2b0e:1884
### globalHandleError @ vue.runtime.esm.js?2b0e:1879
### handleError @ vue.runtime.esm.js?2b0e:1839
### invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1862
### invoker @ vue.runtime.esm.js?2b0e:2179
### original._wrapper @ vue.runtime.esm.js?2b0e:6911
### vue.runtime.esm.js?2b0e:1888 TypeError: Cannot read property 'appendChild' of null### at new Drawing (qrcode.js?d044:370)### at new QRCode (qrcode.js?d044:579)### at VueComponent.creatQrCode (home.vue?afc8:120)### at VueComponent.dianJiZhanShi (home.vue?afc8:175)### at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1854)### at HTMLAnchorElement.invoker (vue.runtime.esm.js?2b0e:2179)### at HTMLAnchorElement.or

看到这个报错是不是第一印象 就是 appendChild 未定义就使用了? 所以我 全局搜索发现 没有这个字段;

接下来 你仔细 看 发现 它是定义在 qrcode.js 里面的 ,我怀疑是引入 js 造成 的 ,所以我又 手动引入一次 把它相对的路径都 写了进来,发现 还是报错; 思考之后又怀疑是生命周期函数的原因 ,因为 created 函数在 data 已有 DOM 还没有创建完成 ,可能会造成它找不到要插入的 DOM元素,所以我再次 把函数调用放在了 mounted

函数里面 ,mounted 生命周期函数中 页面已经渲染完成,DOM 节点也已经创建,应该是没问题的,结果还是报错; 后来我干脆把它放在了methods 一个 函数里面去调用,发现点击的时候还是报同样的错。 我就意识到,是我有一部分没意识到,或者说给忽略了。 我 仔细研究后发现

// this.$nextTick (function () {//   this.creatQrCode();   //  这个函数 要在 this.$nextTick 里面调用   才不会报错// })

当然 我这里还有点波折 ,我的HTML 元素 也就是上面的

是在 一个遮盖层的 组件只能存在的,点击的时候才显示这个遮盖层,所以在生命周期函数里面,调用这个函数哪怕配合使用 this.$nextTick 调用也是不合适的。

希望 我的经验能帮到你

nextTick 简单介绍

下面是我的代码关于二维码的这一部分

    <!-- 二维码遮盖层 --><div class="homeStyle"><van-popup v-model="show"><div class="qrcode" ref="qrCodeUrl" id="qrcode"> </div></van-popup></div>
import {DropdownItem,DropdownMenu,Grid,GridItem,Icon,Popup,Radio,RadioGroup,Swipe,SwipeItem,Tabbar,TabbarItem} from 'vant'import store from 'store'import Vue from 'vue'import axios from 'axios'import QRCode from 'qrcodejs2'
 // 生成二维码函数creatQrCode() {let cardNo = store.get('__cardNo__')log.info(cardNo,'二维码生成')var qrcode = new QRCode('qrcode', {text: cardNo ,width: 150,height: 150,// background: '#f0f',   // 背景色// foreground: '#ff0'    // 前景色})//  log.info(qrcode,'qrcode66666666666666666666666666') },dianJiZhanShi () {// this.creatQrCode();// 点击展示二维码this.show = !this.showthis.$nextTick (function () {this.creatQrCode();})},

下面补充一点知识:

微信长按识别二维码,在 vue 项目中的实现

微信长按识别二维码是 QQ 浏览器的内置功能,该功能的基础一定要使用 img 标签引入图片,其他方式的二维码无法识别。

在 vue 中使用 QrcodeVue 插件

  • demo1 在 template 标签中直接使用
<qrcode-vue :value="codeUrl" :size="size" level="H"></qrcode-vue>

在微信中长按无法识别二维码

正确的做法

使用 qrcode 插件

  • 在 template 标签中是使用 img 标签引入
<template><div><p>长按识别二维码支付</p><div id="code"><img class="code" :src="url" alt=""></div></div>
</template>
  • 在 methods 方法里面生成二维码图片后加入 img 中即可
methods: {QRCode.toDataURL('自定义的内容,可传参').then(url => {this.url = url}).catch(err => {console.error(err)})
}

vue 项目中 自动生成 二维码相关推荐

  1. vue项目中自动生成二维码

    vue项目中自动生成二维码 我们在做vue项目时,很多时候要用到生成二维码的功能,今天给大家介绍一个有前端生成二维码的小例子: 1.安装vue-qr: npm isntall vue-qr --sav ...

  2. vue项目使用qrcodejs2生成二维码

    1.安装 cnpm i qrcodejs2 -S 2.使用 template文件 <!-- 二维码弹框 --> <el-button type="primary" ...

  3. vue项目中批量打印二维码

    前提:项目中要打印的二维码为后台返回,批量选择后,点击打印,先打开二维码预览界面,再执行打印. 以下代码中 codePicList为选中的二维码数组.重点css:page-break-after:al ...

  4. vue根据链接自动生成二维码QRCode

    1.安装 npm install qrcodejs2 2.引入页面 import QRCode from 'qrcodejs2' 3.代码使用 template: <div class=&quo ...

  5. 在UniApp的H5项目中,生成二维码和扫描二维码的操作处理

  6. 【在web项目jsp页面自动生成二维码功能】

    在web项目jsp页面自动生成二维码功能 原文: http://www.cnblogs.com/gczmn/. https://www.jq22.com/jquery-info294/. 先将下面的文 ...

  7. Vue移动端H5生成二维码功能(qrcodejs2)

    相信大家都遇到或是做过生成二维码的功能需求,现在针对vue移动端方法作简单介绍 1.安装.引用二维码插件 # 通过 npm 安装    npm i qrcodejs2 # 通过 yarn 安装   y ...

  8. 最强打包插件,支持fir,蒲公英上传, 360加固 ,自动生成二维码

    文章目录 序言 说明 效果 使用 下载demo 导入文件 文件内容说明 配置gradle 配置gradle.properties 文件位置 内容 项目中配置 补充说明 1.360加固配置 2.curl ...

  9. 简单的二维码生成接口,自动生成二维码,返回图片地址

    自动生成二维码,返回图片地址 本来不想写的,但是怕太久不写这个东西,就要荒废了,就先记录一下简单的东西 这里因为,返回地址的时候,通过了nginx ,我试了很多方法都抓取不到对应的IP地址, 就在ng ...

最新文章

  1. ASP.NET MVC:WebPageBase.cs
  2. 算法--06年华为面试:求两个数组的最小差值(Java实现)
  3. c#如何通过ftp上传文件_定时上传文件到ftp,如何使用工具定时上传文件到ftp
  4. 多线程与高并发(六):线程池可用的各种高并发容器详解:CopyOnWriteList,BlockingQueue等
  5. 专业对不对口重要吗_应届生求职,专业对口到底重不重要?
  6. 【机器学习】opencv-人脸识别
  7. linux上的定时器上的jiffies,Linux kernel -- 定时器/jiffies
  8. EF中报错:附加类型“xxxx”的实体失败,因为相同类型的其他实体已具有相同的主键值。
  9. 通过Python让数据产生价值,做到这4个字就够了
  10. s 修饰符:dotAll 模式
  11. Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.4.4 延迟初始化的bean...
  12. java生日验证_Java验证身份证号码是否有效
  13. max(X,Y),min(X,Y)的期望求解
  14. STCMCU各系列里程碑的进化
  15. 2014世界杯分组揭晓
  16. Winform2、(C#) 设置编译后.exe执行文件的图标
  17. 【洛谷 P3191】 [HNOI2007]紧急疏散EVACUATE(二分答案,最大流)
  18. 分销的智能变局,华为好望云服务的铁索连环
  19. Android SIM 主要流程
  20. php每四位隔开,php数字每三位加逗号的功能函数

热门文章

  1. 水果忍者(数学 叉积)
  2. 启动记事本后在任务栏可以看到它,但是却没有在桌面窗口显示的问题
  3. 互联网春节红包的寓言:奇迹如斯,赢家寥寥
  4. c语言QQ管理系统四百条,C语言程序设计论文-工会成员信息管理系统.doc
  5. 服务器怎么和本地共享文件夹同步,云服务器如何共享文件夹同步
  6. 【Python】类型转换:float()函数
  7. 基于TCGA及SEER等癌症公共数据库的深度挖掘和科研设计会议
  8. 【Python实战】数据预处理(数据清理、集成、变换、归约)
  9. Java程序员如何月薪达到两万,需要技术水平达到什么程度?
  10. WEB电商项目广告管理与缓存解决方案