使用 Vue 3 和 qrcode.js 开发二维码显示组件

二维码在现代应用中广泛使用,例如支付、身份验证、链接分享等。本文将介绍如何使用 Vue 3 和 qrcode.js 库来创建一个灵活的二维码显示组件,并展示如何在应用中使用它。

1. 安装必要的依赖

首先,我们需要安装 Vue 3 和 qrcode.js。如果你还没有创建 Vue 3 项目,可以使用 Vue CLI 快速创建一个新项目:

复制代码
npm install -g @vue/cli
vue create qrcode-app
cd qrcode-app

然后,安装 qrcode.js:

复制代码
npm install qrcode

2. 创建 QrCodeGenerator 组件

接下来,我们创建一个名为 QrCodeGenerator 的组件,用于生成和显示二维码。

QrCodeGenerator.vue
html 复制代码
<template>
  <div>
    <canvas ref="qrcode"></canvas>
  </div>
</template>

<script setup>
import { ref, onMounted, watch } from 'vue';
import QRCode from 'qrcode';

const props = defineProps({
  value: {
    type: String,
    required: true,
  },
  size: {
    type: Number,
    default: 200,
  },
  level: {
    type: String,
    default: 'M',
    validator: (value) => ['L', 'M', 'Q', 'H'].includes(value),
  },
});

const qrcode = ref(null);

const generateQrCode = () => {
  if (qrcode.value) {
    QRCode.toCanvas(qrcode.value, props.value, {
      width: props.size,
      errorCorrectionLevel: props.level,
    }, (error) => {
      if (error) console.error(error);
    });
  }
};

onMounted(generateQrCode);

watch(() => props.value, generateQrCode);
watch(() => props.size, generateQrCode);
watch(() => props.level, generateQrCode);
</script>

3. 在应用中使用 QrCodeGenerator 组件

现在,我们可以在应用中使用 QrCodeGenerator 组件。我们将创建一个示例页面,展示不同大小和纠错级别的二维码。

App.vue
html 复制代码
<template>
  <div id="app">
    <h1>二维码示例</h1>
    <QrCodeGenerator value="https://www.example.com" size="100" level="L"></QrCodeGenerator>
    <QrCodeGenerator value="https://www.example.com" size="200" level="M"></QrCodeGenerator>
    <QrCodeGenerator value="https://www.example.com" size="300" level="Q"></QrCodeGenerator>
    <QrCodeGenerator value="https://www.example.com" size="400" level="H"></QrCodeGenerator>
  </div>
</template>

<script setup>
import QrCodeGenerator from './components/QrCodeGenerator.vue';
</script>

4. 运行应用

确保你的项目设置正确,然后运行应用:

html 复制代码
npm run serve

访问你的应用,你应该会看到一系列不同大小和纠错级别的二维码。

详细解释

组件定义和道具验证

QrCodeGenerator 组件中,我们定义了三个道具:valuesizelevelvalue 是必需的字符串道具,用于生成二维码的数据。size 是可选的数字道具,指定二维码的大小,默认值为 200。level 是可选的字符串道具,指定二维码的纠错级别,默认值为 M,支持 L(低)、M(中)、Q(四分之一)、H(高)四种级别。为了确保传入的纠错级别是有效的,我们使用了 validator 函数进行验证。

二维码生成逻辑

我们使用 Vue 3 的组合式 API(<script setup> 语法糖)来定义组件的逻辑。在 setup 函数中,我们创建了一个对 Canvas 元素的引用,并定义了 generateQrCode 函数来生成二维码。在组件挂载时(onMounted)以及每次道具变化时(通过 watch 监听道具变化),都会调用 generateQrCode 函数。

应用中的使用

App.vue 中,我们引入并使用了 QrCodeGenerator 组件,并传递了不同的 valuesizelevel 值来展示各种大小和纠错级别的二维码。

相关推荐
豆苗学前端5 分钟前
彻底讲透浏览器的事件循环,吊打面试官
前端·javascript·面试
来自上海的这位朋友6 分钟前
从零打造一个无依赖的Canvas图片编辑器
javascript·vue.js·canvas
OpenTiny社区16 分钟前
揭秘!TinyEngine低代码源码如何玩转双向转换?
前端·vue.js·低代码
用户81686947472517 分钟前
beginWork 与 completeWork 的内部职责分工
前端·react.js
3秒一个大20 分钟前
从后端模板到响应式驱动:界面开发的演进之路
前端·后端
三喵22322 分钟前
跨域 iframe 内嵌的同源策略适配方案-Youtube举例
前端·爬虫
灰灰勇闯IT22 分钟前
RN跨端适配与沉浸式体验:适配不同设备与系统
javascript·react native·react.js
无敌暴龙兽23 分钟前
Android 布局多次测量
前端
北辰alk26 分钟前
Vuex Store 的核心属性及其作用详解
vue.js
wordbaby26 分钟前
React Native 数据同步双重奏:深度解析“页面级聚焦”与“应用级聚焦”的区别
前端·react native