vue+QRCode生成二维码+el-dialog弹出显示

文章介绍了如何在Vue项目中安装并使用qrcode插件创建二维码,以及遇到的初次加载bug和重复生成问题的解决方案,通过$nextTick和清除上一个二维码实现正确显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先,安装qrcode插件,前端控制台中输入:

cnpm install qrcodejs2 --save
//或者
npm install qrcodejs2 --save

2.js中导入包

import QRCode from 'qrcodejs2'

3.js中添加方法creatQrCode,可自己命名

creatQrCode() {
      var qrcode = new QRCode(this.$refs.qrCodeUrl, {
            text: '', // 需要转换为二维码的内容,这里自己设置
            width: 220,
            height: 220,
            colorDark: '#000000',
            colorLight: '#ffffff',
            correctLevel: QRCode.CorrectLevel.H
        })
    },

4.定义弹窗判定字段

 data(){
    return{

      qrcodeShow: false,

    }
  },

5.el-dialog中添加上存放图片的容器

    <el-dialog v-model = "qrcodeShow" width="270px" title="二维码" center>
      <div class="qrcode" ref="qrCodeUrl"></div>
    </el-dialog>

6.建立一个button,点击button显示弹窗

 <el-button @click="creatQrCode()" style="width:63px;">获取二维码</el-button>

问题:此时点击button就可以弹出二维码了,但是测试发现,第一次点击会出现个bug,没有二维码生成这是因为dialog的qrcodeShow初始状态为false,点击后变为true,而显示二位吗的div使放在Dialog组件中的,第一次点击获取不到div的信息,所以就报了个错。

并且,重复点击会出现多个二维码排列下来,这个是因为上一个二维码没有清除的原因。

这里我使用$nextTick来解决上面的bug问题,并且在获取新的二维码之前清除一下上一个二维码,这里我使用document.getElementById("qrcode").innerHTML = "" 来解决;上代码

showDialog() {
      this.qrcodeShow = true;
        this.$nextTick(()=>{
            let qrcodeI = document.getElementById("qrcode");
            let qrcode = new QRCode(qrcodeI);  
            document.getElementById("qrcode").innerHTML = "";
            this.creatQrCode()
        })  
    },

此时,bug都全部解决啦!

本人小白一个,希望能帮助到大家!

### 在 Element UI 的 `el-dialog` 组件中集成二维码登录功能 为了实现在 `el-dialog` 中展示并使用二维码进行登录,需结合前端Vue.js 和第三方库 qrcode.js生成动态二维码。以下是具体实现方法: #### HTML 结构 创建一个对话用于承载二维码图片,并设定相应的属性来控制其可见性和加载状态。 ```html <template> <div> <!-- 对话 --> <el-dialog title="扫描二维码登录" :visible.sync="dialogVisible" :close-on-click-modal="false" width="350px" @opened="generateQRCode"> <div class="qrcode-container" v-loading="loading"> <div id="qr-code"></div> </div> </el-dialog> <!-- 登录按钮触发对话打开 --> <el-button type="primary" @click="handleLogin">立即登录</el-button> </div> </template> ``` #### JavaScript 部分 引入必要的依赖项并通过 methods 定义处理逻辑函数,在 mounted 生命周期钩子或者特定事件发生时调用这些函数以初始化页面行为。 ```javascript <script> import QRCode from 'qrcodejs2'; // 导入 qrcode 库 export default { data() { return { dialogVisible: false, // 控制对话显隐 loading: true // 加载指示器开关 }; }, methods: { handleLogin() { // 打开对话的方法 this.dialogVisible = !this.dialogVisible; }, generateQRCode() { // 创建二维码图像的方法 let qrContainer = document.getElementById('qr-code'); while (qrContainer.firstChild) { qrContainer.removeChild(qrContainer.firstChild); } new QRCode(qrContainer, { text: "https://example.com/login",// 此处应替换为实际链接地址 width: 200, height: 200, colorDark : "#000", colorLight : "#fff" }); setTimeout(() => { this.loading = false; // 延迟关闭加载动画模拟网络请求时间 }, 1000); } } } </script> ``` #### CSS 样式调整 适当修改样式使界面更加美观友好。 ```css <style scoped> .qrcode-container{ display: flex; justify-content: center; align-items: center; } #qr-code img{ /* 调整二维码大小 */ max-width: none!important; margin-top: -8px!important; } </style> ``` 上述代码展示了如何利用Element UI提供的`el-dialog`组件配合JavaScript插件`qrcode.js`完成简单的二维码生成功能[^1]。当用户点击“立即登录”的时候会弹出包含有可扫码的二维码窗口[^2]。此外还提供了基本样式的优化建议让用户体验更佳[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值