在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.

    //直接下载apk
    downloadNow(){
      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;
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】-----基础知识

注释 定义&#xff1a;让计算机跳过这个代码执行用三个单引号/双引号都表示注释信息&#xff0c;在Python中单引号与双引号没有区别&#xff0c;但必须是成对出现 输出与输入 程序是有开始&#xff0c;有结束的&#xff0c;程序运行规则&#xff1a;从上而下&#xff0c;由内…

稀碎从零算法笔记Day6-LeetCode:长度最小的子数组

前言&#xff1a;做JD的网安笔试题&#xff0c;结果查找子串&#xff08;单词&#xff09;这个操作不会。痛定思痛&#xff0c;决定学习滑动数组 题型&#xff1a;数组、双指针、滑动窗口 链接&#xff1a;209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 来…

ATFX汇市:油价回落之际加元币值走弱,USDCAD有望刷新年内新高

ATFX汇市&#xff1a;加元是商品货币&#xff0c;币值受到国际油价和精炼石油出口的显著影响。2022年3月份&#xff0c;国际油价达到130美元的峰值水平&#xff0c;随后开启回落走势&#xff0c;时至今日&#xff0c;最新报价在80美元下方&#xff0c;累计跌幅近40%。疲弱的油价…

【框架学习 | 第一篇】一篇文章快速入门MyBatis

文章目录 1.Mybatis介绍1.1Mybatis历史1.2Mybatis特点1.3与其他持久化框架对比1.4对象关系映射——ORM 2.搭建Mybatis2.1引入依赖2.2创建核心配置文件2.3创建表、实体类、mapper接口2.4创建映射文件2.4.1映射文件命名位置规则2.4.2编写映射文件2.4.3修改核心配置文件中映射文件…

基于springboot+vue的医疗报销系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

培训机构如何通过小魔推做高效短视频矩阵?

随着智能手机的普及和移动互联网的高速发展&#xff0c;短视频作为一种全新的媒介形式&#xff0c;迅速崛起并占领了大量用户的碎片化时间。从野蛮生长到全面流行&#xff0c;逐渐成为各行业引流获客的主战场之一。 各行各业都意识到了短视频平台的潜力&#xff0c;今天给大家…

【JAVA】Tomcat集成到IDEA

目录 1.在IDEA中安装插件&#xff1a;Smart Tomcat。 2.配置smart tomcat 浏览器显示中文出现乱码 我们可以借助IDEA的插件&#xff0c;把tomcat集成IDEA中&#xff0c;然后我们就可以通过IDEA一键式的重新打包部署了。 1.在IDEA中安装插件&#xff1a;Smart Tomcat。 1&a…

建立网络防御时需要重点考虑的10个因素

互联网安全中心&#xff08;CIS&#xff09;建议企业可以从以下10个因素入手&#xff1a;资产管理、数据管理、安全配置、账户和访问控制管理、漏洞管理、日志管理、恶意软件防御、数据恢复、安全培训和事件响应。 1、资产管理 建立网络防御的第一步是制定企业资产和软件资产的…

day12_oop_抽象和接口

今日内容 零、 复习昨日 一、作业 二、抽象 三、接口 零、 复习昨日 final的作用 修饰类,类不能被继承修饰方法,方法不能重写[重点]修饰变量/属性,变成常量,不能更改 static修饰方法的特点 static修饰的方法,可以通过类名调用 static修饰的属性特点 在内存只有一份,被该类的所有…

msvcp140.dll丢失的解决方法的全面分析,msvcp140.dll文件的应用范围

在我们使用计算机的时候&#xff0c;偶尔会遭遇一些技术问题&#xff0c;其中一个比较常见的问题就是出现了"丢失msvcp140.dll文件"的提示。当我们的电脑告诉我们缺少了msvcp140.dll文件时&#xff0c;常常是因为某些程序无法找到这个文件而导致了程序的运行异常。那…

lightGBM的学习整理

执行步骤 1、初始化&#xff0c;选择一个初始模型&#xff0c;通常是一个常数&#xff0c;比如分类问题中内的类别概率的先验值&#xff0c;回归问题中的目标变量的平均值。 2、训练决策树&#xff0c;对于每一轮迭代&#xff0c;计算当前模型的梯度&#xff08;损失函数的负…

程序员如何选择职业赛道?看这宝典就够了

文章目录 程序员如何选择职业赛道&#xff1f;方向一&#xff1a;自我评估与兴趣探索方向二&#xff1a;提升技能水平方向三&#xff1a;考虑个人职业规划方向四&#xff1a;寻求职业咨询方向五&#xff1a;市场需求与趋势分析 总结 程序员如何选择职业赛道&#xff1f; 程序员…

LLM(十一)| Claude 3:Anthropic发布最新超越GPT-4大模型

2024年3月4日&#xff0c;Anthropic发布最新多模态大模型&#xff1a;Claude 3系列&#xff0c;共有Haiku、Sonnet和Opus三个版本。 Opus在研究生水平专家推理、基础数学、本科水平专家知识、代码等10个维度&#xff0c;超过OpenAI的GPT-4。 Haiku模型更注重效率&#xff0c;能…

智能排班系统 【聚合服务开发】

文章目录 聚合服务创建聚合服务添加依赖启动类问题整合所有微服务的配置文件到聚合服务中文件结构 其他微服务修改网关服务修改启动 聚合服务 为什么需要开发聚合服务&#xff1f; 答&#xff1a;微服务项目中&#xff0c;往往会将系统的功能进行分析&#xff0c;然后进行服务…

【Python】进阶学习:pandas--describe()函数的使用介绍

&#x1f40d;【Python】进阶学习&#xff1a;pandas——describe()函数的使用介绍 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&am…

JDK收费的各个版本(记录一下)

JDK收费的各个版本&#xff08;记录一下&#xff09; Java收费的安装包使用的时候要闭坑 从2019年1月份开始&#xff0c;Oracle JDK 开始对 Java SE 8 之后的版本开始进行商用收费&#xff0c;确切的说是 8u201/202 之后的版本。如果你用 Java 开发的功能如果是用作商业用途的…

uniapp iOS 真机调试

一、下载爱思助手 二、打开爱思助手&#xff0c;把你的 苹果手机 用原装数据线连接至电脑&#xff1a; 找到 工具箱 > 搜索IPA > 打开IAP签名 三、添加 IPA 文件 mac&#xff1a;finder 》应用程序 》右键 HbuilderX 》显示包内容 》HbuilderX / plugins/ lau…

【vue.js】文档解读【day 1】 | 模板语法2

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 本人会很热心的阐述自己的想法&#xff01;谢谢&#xff01;&#xff01;&#xff01; 文章目录 模板语法JavaScript表达式仅支持表达式调用函数&#xff1f;受限的全局访问 指令参数动态参数动态参数中…

LeetCode Python - 31.下一个排列

目录 题目答案运行结果 题目 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更…

C语言-两数组元素互换

#include <stdio.h> #include <string.h>//两数组元素互换 void swap(int ch1[],int ch2[],int sz) {int i 0;char ch 0;for(i 0;i < sz;i){ch ch1[i];ch1[i] ch2[i];ch2[i] ch;} } //打印数组元素 void print(int ch[],int sz) {int i 0;for(i 0;i <…