vue 插件 之 生成二维码 qrcodejs2

qrcodejs2 生成二维码插件

还有另外一个 vue-qr插件 也可以生成二维码

cnpm install --save qrcodejs2

使用

<template>
  <div>
    <div class="qrcode" ref="qrCodeUrl"></div>
  </div>
</template>

<script>
import { Button, Popup } from "vant";
import QRCode from "qrcodejs2";
export default {
  components: {
    vanButton: Button,
    vanPopup: Popup
  },
  data() {
    return {};
  },
  created() {
    //   会报错
    this.creatQrCode()
  },
  mounted() {
    // this.creatQrCode()
  },
  methods: {
    creatQrCode(code) {
      var qrcode = new QRCode(this.$refs.qrCodeUrl, {
        text: "hello world", // 需要转换为二维码的内容
        width: 200,
        height: 200,
        colorDark: "#000000",
        colorLight: "#ffffff",
        correctLevel: QRCode.CorrectLevel.H
      });
    }
  }
};
</script>
<style scoped>
.mycode {
  display: inline-block;
  margin-bottom: 30px;
  border: 1px solid #ddd;
}
.mycode img {
  width: 132px;
  height: 132px;
  background-color: #fff;
  padding: 6px;
  box-sizing: border-box;
}
</style>

结果报错了
在这里插入图片描述

翻阅源码
通过查找 appendChild() 这个方法
找到大约 200行的位置在这里插入图片描述
在这里插入图片描述在这里插入图片描述
有源码可知 插件qrcodejs2 生成的二维码是由canvas(默认)也可以用svg做出来的

总之从源码来看,这个过程是操作了DOM
所以 页面必须先渲染后生成二维码 否则将会报错
所以 如果要在初始化就要渲染二维码必须要放在mounted钩子中
所以在配合弹窗生成二维码时 不妨延时300毫秒

    creatQrCode(code) {
      setTimeout(() => {
        var qrcode = new QRCode(this.$refs.qrCodeUrl, {
          text: "hello world", // 需要转换为二维码的内容
          width: 200,
          height: 200,
          colorDark: "#000000",
          colorLight: "#ffffff",
          correctLevel: QRCode.CorrectLevel.H
        });
      }, 300);
    }

将上述代码改成

  created() {
    //   会报错
    // this.creatQrCode()
  },
  mounted() {
    this.creatQrCode()
  },

在这里插入图片描述

适当改变刚才的例子
点击按时间戳生成新的验证码

<template>
  <div>
    <div class="qrcode" ref="qrCodeUrl"></div>
    <van-button type="info" @click="creatQrCode(new Date().getTime())">生成二维码</van-button>
  </div>
</template>

<script>
import { Button, Popup } from "vant";
import QRCode from "qrcodejs2";
export default {
  components: {
    vanButton: Button,
    vanPopup: Popup
  },
  data() {
    return {};
  },
  created() {
    //   会报错
    // this.creatQrCode()
  },
  mounted() {
    // this.creatQrCode();
  },
  methods: {
    creatQrCode(code) {
      console.log(code);
      setTimeout(() => {
        var qrcode = new QRCode(this.$refs.qrCodeUrl, {
          text: code, // 需要转换为二维码的内容
          width: 200,
          height: 200,
          colorDark: "#000000",
          colorLight: "#ffffff",
          correctLevel: QRCode.CorrectLevel.H
        });
      }, 300);
    }
  }
};
</script>

<style scoped>
.mycode {
  display: inline-block;
  margin-bottom: 30px;
  border: 1px solid #ddd;
}
.mycode img {
  width: 132px;
  height: 132px;
  background-color: #fff;
  padding: 6px;
  box-sizing: border-box;
}
</style>

在这里插入图片描述

看似没问题,但是再次点击时出现了 些许小毛病
在这里插入图片描述
继续点击将会继续生成二维码,第一次生成的并没有删掉
在这里插入图片描述
解决思路:
操作 dom 在执行生成二维码前 先将 innerHTML置空

  methods: {
    creatQrCode(code) {
      console.log(code);
      setTimeout(() => {
        //  生成之前先置空 qrcode 容器的innerHTML
        var div = document.getElementsByClassName("qrcode")[0];   //  为什么是 [0]   
        //  Elements  生成类数组  页面只有一个样式类叫 qrcode  所以就是第一个元素咯
        div.innerHTML = "";
		//  this.$refs.qrCodeUrl.innerHTML = ''
        var qrcode = new QRCode(this.$refs.qrCodeUrl, {
          text: code, // 需要转换为二维码的内容
          width: 200,
          height: 200,
          colorDark: "#000000",
          colorLight: "#ffffff",
          correctLevel: QRCode.CorrectLevel.H
        });
      }, 300);
    }
  }

在这里插入图片描述

其他api
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值