qrcode根据本地数据生成二维码第一次显示跨页面后显示异常
最近写二维码的时候,突然想起之前项目遇到过的一个问题,网上也没有这方面解答,想到大家今后可能也会遇到这类问题,在此记录下来,希望对你们有所帮助,大佬们不喜勿喷,qrcode配合画布canvas本地生成二维码的时候第一次能够正常显示,最下方会贴出代码


跨页面后显示异常

刚开始是有些头疼的,因为控制台一切正常,没有抛出错误,然后去看qrcode的参数属性也没有问题,我是多个页面需要生成多个二维码,封装了qrcode组件

F12逐步排查看html结构,生成多个二维码之后并没有销毁

所以第一想到的是可能是覆盖问题,我也不知道为什么关闭窗口后并没有销毁,那么就手动remove()销毁它吧,结果还是悲剧的,依旧没有效果,通过打印结果可以得知二维码是正常生成了的只是没有被渲染上去


难道是跨页面的时候当前页面的id和其他页面的id重复导致qrcode生成二维码成功了但是画布无法正常显示吗,那么只需要每个引用了qrcode组件的页面都传一个唯一的值过来做id就行了,抱着试一试的态度我再次打开了vscode,将父组件的name传了过来
父组件

子组件id


之后再获取到nameOn生成二维码,还挺好用
<div>
<!-- 单据二维码-->
<el-table-column :label="$t('receipt.orderQRCode')"
header-align="center"
align="center"
min-width="150">
<template slot-scope="scope">
<el-button type="primary" @click="createORCode(scope.row.receiptOrder)">
{{$t('receipt.generateQRcode')}}
</el-button>
</template>
</el-table-column>
/**
* 生成二维码
*/
createORCode (orderNumber) {
this.codeDialogVisible = true
this.orderNumber = orderNumber
this.$nextTick(() => {
this.$refs.codeDialog.init()
})
},
qrcode公共组件
<template>
<!-- 二维码 -->
<el-dialog
width="400px"
:title="$t('receipt.viewQRCode')"
:close-on-click-modal="false"
:visible.sync="visible"
@closed="visible = false"
:append-to-body="true"
>
<el-container style="margin-left: 5px">
<el-header style="height: 15px">
{{ $t("receipt.documentNo") + ":" + orderNumber }}
</el-header>
<el-main>
<canvas :id="nameOn" class="canvas"></canvas>
</el-main>
</el-container>
</el-dialog>
</template> <script>
import QRCode from 'qrcode' export default {
name: 'QRCode',
props: {
orderNumber: {
type: String,
default: ''
},
nameOn: {
type: String,
default: ''
}
},
data () {
return {
visible: false
}
},
methods: {
// 初始化
init () {
this.visible = true
this.$nextTick(() => {
console.log(this.orderNumber, 'orderNumber')
// console.log(this.nameOn, 'name')
if (this.orderNumber) {
// this.viewImgVisible = true
// 生成二维码
let opts = {
errorCorrectionLevel: 'H',
type: 'image/jpeg',
rendererOpts: {
quality: 0.3
}
}
console.log(opts, 'opts')
let canvasEle = document.querySelector(`#${this.nameOn}`)
QRCode.toDataURL(canvasEle, this.orderNumber, opts, function (err) {
if (err) throw err
})
}
})
}
}
}
</script> <style scoped>
.canvas {
margin-left: 10%;
width: 80% !important;
height: 80% !important;
}
</style>
qrcode根据本地数据生成二维码第一次显示跨页面后显示异常的更多相关文章
- Vue中qrcode的使用方法(生成二维码插件) / 前端页面根据URL链接生成二维码
1.下载 npm install qrcode --save-dev 2.引入(在所需要的页面中引入) import QRCode from "qrcode"; //引入生成二维码 ...
- Jquery.Qrcode在客户端动态生成二维码并添加自定义Logo
0 Jquery.Qrcode简介 Jquery.Qrcode.js是一个在浏览器端基于Jquery动态生成二维码的插件,支持Canvas和Table两种渲染方式,它的优点是在客户端动态生成,减轻了服 ...
- 在input中输入需要的数据,使用qrcode,点击生成二维码
话不多说直接上代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&quo ...
- 关于 QRCode 的问题[C# 生成二维码固定大小]
一直在纠结了一天多的问题:就是为什么生成的二维码会随着内容多少的变化而变化大小,但是为什么网上做出来的二维码内容变化但是大小却没有变化?刚开始的时候我就一直围绕着是不是根据缩略图来做的,但是这个方法行 ...
- jquery.qrcode.min.js——前端生成二维码
下载地址:[http://www.jq22.com/jquery-info294] demo1:[https://www.helloweba.com/view-blog-226.html] demo2 ...
- QRCode.jar生成二维码
参考http://www.oschina.net/code/snippet_2252392_45457 package com.ORcode; import java.awt.image.Buffer ...
- 使用Python的库qrcode生成二维码
现在有很多二维码的生成工具,在线的,或者安装的软件,都可以进行生成二维码.今天我用Python的qrcode库生成二维码.需要预先安装 Image 库 安装 用pip安装 # pip install ...
- 生成二维码的 jQuery 插件:jquery.qrcode.js的中文乱码问题
在使用jquery.qrcode.js这个插件生成二维码的时候发现并不能识别中文. 原因在于:jquery-qrcode是采用charCodeAt()方式进行编码转 换的. 而这个方法默认会获取它的U ...
- qrcode——js生成二维码
1.引入 qrcode.min.js(点击下载demo) 2.html: <div id="qrcode"></div> js: var qrcode = ...
- 一次使用Python连接数据库生成二维码并安装为windows服务的工作任务
最近有一个需求,在现有生产系统上的人员库中增加一个此人员关键信息的二维码,支持文字版和跳转版两种方式,与报表工具关联,可打印.以windows服务方式,定时检查,只要发现某人员没有此二维码信息,就生成 ...
随机推荐
- CSS & JS Effect – Image hover animation
效果 效果来自: webflow 的一个模板 需求解释 有 3 给元素, 图片, overlay(黑影), link mouse enter 的时候, 图片要 zoom in. overlay 要 f ...
- Identity – Introduction & Scaffold
主要参考: Introduction to Identity on ASP.NET Core Start by command dotnet new webapp --auth Individual ...
- 系统编程-进程-fork深度理解、vfork简介
1. fork基本使用 #include <unistd.h> #include <stdio.h> int main(){ pid_t pid = fork(); if(pi ...
- docker 安装 elasticsearch 集群
此处部署为单个服务器启动三个elasticsearch容器 问题:本打算在三个服务器上单独部署elasticsearch 容器,elasticsearch.yml 注册用的宿主机ip,但是容器之间通信 ...
- axios 常见状态码
'100': 'Continue', '101': 'SwitchingProtocols', '102': 'Processing', '103': 'EarlyHints', '200': 'Ok ...
- apache安装详解
Apache安装 准备工作. 首先在C盘根目录下创建一个名为web的文件夹作为php开发环境的安装位置,并在web文件夹中创建apache24子文件夹,将apache解压后文件放至此处. 安装包 首先 ...
- 五、Spring Boot集成Spring Security之认证流程2
二.概要说明 上文已详细介绍了四.Spring Boot集成Spring Security之认证流程 本文则着重介绍用户名密码认证过滤器UsernamePasswordAuthenticationFi ...
- 多校A层冲刺NOIP2024模拟赛05
T1.好数(number) 签到题 把选三个数相加拆为选择一个数,然后看前面有没有能用两个数组合出答案. $ O(n^2) $ . 码( #include<bits/stdc++.h> u ...
- Vue 实现 PDF 导出功能
旨在通过 html2canvas 和 jspdf,先将页面的 html 转成 canvas,再将 canvas 转成 pdf,同时解决了分页截断的问题. 安装依赖 yarn add html2canv ...
- 使用LayUI实现文件上传的一个误区
1.HTML 2.JS 3.后端处理(注意:参数 file) 这里传入的参数名只能是 file LayUI文件上传官方文档: https://www.layui.com/doc/modules/upl ...