在Vue中根据Url下载地址生成二维码展示在界面上

最近来了一个新需求,就是在网页页面上点击按钮不在是直接下载app安装包,需要支持手机扫码下载app,避免他们需要先从电脑上下载,然后传到微信,然后手机从微信上下载下来,得了,需求就是根据后端传递过来的Url请求地址,去生成一个二维码供手机去扫,扫了后完成下载。

引入依赖

由于在vue中我们不使用相关第三方库,我们就无法直接生成一个二维码,还是动态生成的,故而我们需要引入一个vue插件,也就是是qrcodejs2,由于它并非是一个Vue插件,故而我们可以通过以下几种方式将他来引入。

导入相关生成二维码的依赖,在vue中可以通过npm 引入

npm install qrcodejs2 --save-dev 

直接引入

<script src="https://cdn.jsdelivr.net/npm/qrcodejs2@0.0.2/qrcode.min.js"></script>

利用引入的依赖生成二维码

在如下代码中,我们通过elment ui的按钮进行操作,后续的操作均是建立在这个按钮上进行的。

 <el-button @click="downloadapk" size="small"  type="primary">下载apk</el-button>

按钮我们有了,那么我们根据npm引入的相关依赖进行操作,在我们需要使用的页面直接引入相关依赖如下,记得我们通过npm引入的依赖,不在具体页面指定,那么系统是不会帮我们主动去引入的。

import QRCode from 'qrcodejs2';

vue界面上,我们定义几个全局变量方便我们使用:

export default {data() {return {qrCodeVisible: false, //默认弹窗关闭showQRCode:true, //默认显示二维码url: '', //后端传递过来的url地址};},methods:{//其他js方法,待补充}}

接下来,我们实现上述的按钮里边的js方法downloadapk

    downloadapk(){//从后端获取url地址,这个随你,无论你从后端获取什么样的格式,我只取url的地址就行了this.$axios.get('/dict/findUrl').then((response) => {this.url = response.data.data.url;//处理生成二维码的方法this.handleClickScan(this.url);}).catch((error) => {//请求异常,报错console.log('error:' + JSON.stringify(error))})},

处理生成二维码的handleClickScan

	handleClickScan(e){this.urlBath=e //获取传递过来的url地址this.qrCodeVisible = true; //展示弹窗// 生成二维码,异步进行this.$nextTick(function () {document.getElementById("qrCodeUrl").innerHTML = "";let qrCodeUrl= new QRCode("qrCodeUrl", {width: 240,height: 240,text: this.urlBath,colorDark: "#000",colorLight: "#fff",});});},

行,js基本上完善了,那么我们需要处理的是,点击下载按钮的弹出框问题了,我需要在用户点击按钮弹出后,展示二维码给用户扫码:

		<el-dialog   :visible.sync="qrCodeVisible" width="300px" :style="{ 'z-index': 1000 }" :modal="false"><div class="ScanImg"><!--展示二维码--><div class="ScanMa" id="qrCodeUrl"></div></div><!--直接下载按钮--><div class="btnupload" @click="downloadNow()"> 直接下载 </div></el-dialog>

为了方便使用,这里也将给出直接下载按钮,样式自己调,用户点击按钮就可以实现直接在页面上下载app.

    //直接下载apkdownloadNow(){const link = document.createElement('a')link.href = this.url;let fname = 'gdb.apk'link.setAttribute('download',fname)document.body.appendChild(link)link.click();document.body.removeChild(link);},

给出样式仅供参考,无实际意义。根据个人的情况进行调整。

.ScanDiao/deep/.el-dialog__body {padding: 5px 2px;
}
.ScanDiao/deep/.el-dialog__header {padding: 0px 120px 0px;color: #fff;
}
.ScanDiao/deep/.el-dialog__title {color: #ffffff;
}
.ScanDiao/deep/.el-dialog__headerbtn {top: 5px;font-size: 21px;
}
.ScanDiao/deep/.el-dialog__headerbtn .el-dialog__close {color: #fff;
}
.btnupload{width: 100px;height: 30px;line-height: 30px;margin: 0 auto;text-align: center;cursor: pointer;background-color: rgb(38, 133, 206);border-radius: 5px;color: #fff;margin-top: 22px;
}
.ScanMa{width: 100%;height: 100%;border: 4px solid #fff;
}
.ScanImg{position: relative;
}

效果图如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/512390.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TikTok黑屏怎么办?快来试试这5个方法!

当今社交媒体的热潮中&#xff0c;TikTok跨境电商占据了重要的一席之地。然而&#xff0c;频繁的黑屏、app打开没有内容显示却成了许多用户的头疼问题。如果你也正在寻找TikTok黑屏的解决办法&#xff0c;那么本文将为你提供5种可能的解决方案。无论你是在使用TikTok国际版黑屏…

【C++】类和对象终篇

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 友元2.1 友元函数2.2 友元类 3. 内部类4. 匿名对象5. 拷贝对象时的一些编译器优化6. 再次理解类和对象 1. 前言 在上一篇博客中提到了类和对象中的构造函数与stat…

【QT】在窗口中添加按钮

在窗口中添加按钮 创建一个QT程序&#xff0c;首先要做什么&#xff1f; 先创建一个应用程序类创建一个窗口类 在窗口中添加按钮 添加头文件&#xff1a;#include 没有设置按钮标题的函数&#xff0c;是因为它继承了父类&#xff0c;设置标题的函数在父类中。 因为好多子类…

十三、类的继承、访问级别

类的继承与访问控制 类的继承 使用sealed修饰的类&#xff0c;是私有类&#xff0c;不能作为基类使用C#中一个类&#xff0c;只能有一个父类&#xff0c;但是可以实现多个接口子类的访问级别不能超过父类的访问级别 using System; using System.Collections.Generic; using S…

【C语言】【洛谷】P1125笨小猴

一、个人解答 #include<stdio.h> #include<string.h>int prime(int num);int main() {char max a, min z;int maxn0, minn1000;char str[100];int num[26] { 0 };fgets(str, sizeof(str), stdin);str[strcspn(str, "\n")] \0;for (int i 0; str[i]…

CentOS的yum报错except OSError, e:

报错信息 Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile base: mirrors.cloud.aliyuncs.comextras: mirrors.cloud.aliyuncs.comupdates: mirrors.cloud.aliyuncs.com File “/usr/libexec/urlgrabber-ext-down”, line 28 except OSError, e: ^…

Gradle学习(一)

最近在学习Gradle&#xff0c;感觉有些东西没见过&#xff0c;记录一下&#xff01; 1.Gradle与Maven的目录框架 2.Gradle的命令行安装 注&#xff1a;学习常用的是使用脚手架生成gradle项目 3.

maven项目报错Cannot resolve plugin org.apache.maven.plugins:maven-war-plugin:2.2

如果IDEA整合maven没有问题&#xff0c;还是报这个错误&#xff0c;很大可能是由于在下载过程中存在网络问题&#xff0c;导致文件下载一半而停止&#xff0c;但是已经在仓库中存在这个文件夹&#xff0c;解决方法是删除文件夹重新下载即可。 删除本地仓库下的\org\apache\mav…

AI大预言模型——ChatGPT与AI绘图及论文高效写作

原文链接&#xff1a;AI大预言模型——ChatGPT与AI绘图及论文高效写作 2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网…

灯丝灯双通道低过温高压线性恒流芯片SM2082ED的应用及特性解析

双通道低过温高压线性恒流芯片是一种电子芯片&#xff0c;它具有双通道设计&#xff0c;可以在高电压条件下工作&#xff0c;并具有低过温特性。这种芯片通常用于需要高电流和高电压的应用&#xff0c;如LED照明、激光器、电机驱动等。 双通道设计意味着该芯片可以同时处理两个…

分布式测试插件 pytest-xdist 使用详解

使用背景&#xff1a; 大型测试套件&#xff1a;当你的测试套件非常庞大&#xff0c;包含了大量的测试用例时&#xff0c;pytest-xdist可以通过并行执行来加速整体的测试过程。它利用多个进程或计算机的计算资源&#xff0c;可以显著减少测试执行的时间。高计算资源需求&#…

保姆级GeoWebCache矢量瓦片切片流程

1矢量切片解决方案 1.1Geoserver配置geowebcache插件 参考文章 (53条消息) 独立安装geoservergeowebcache发布arcgis切片服务_itouch_ok的专栏-CSDN博客 1.将下载好的geoserver 2.19.3安装部署 将下载好的geowebcache 2.19.3的war包解压到 GeoServer 安装目录下./usr/loc…