吴文俊
吴文俊
关注前端编码,想要学习开发 Java, Android-iOS App.

qrcode.vue

项目示例 / 仓库地址

一款同时支援 Vue 2 和 Vue 3 的二维码组件。
A Vue.js component to generate qrcode. Supports both Vue 2 and Vue 3.

快速开始

快速添加 qrcode.vue 组件到项目中

npm install --save qrcode.vue # yarn add qrcode.vue
dist/
|--- qrcode.vue.cjs.js         // CommonJS
|--- qrcode.vue.esm.js         // ES module
|--- qrcode.vue.browser.js     // UMD for browser or require.js or CommonJS
|--- qrcode.vue.browser.min.js // UMD Minimum size

使用

e.g.

import { createApp } from 'vue';
import QrcodeVue from 'qrcode.vue';

createApp({
  data: {
    value: 'https://example.com',
  },
  template: '<qrcode-vue :value="value"></qrcode-vue>',
  components: {
    QrcodeVue,
  },
}).mount('#root');

或者,在独有单文件扩展 *.vue 中使用:

<template>
  <qrcode-vue :value="value" :size="size" level="H" />
</template>
<script>
  import QrcodeVue from 'qrcode.vue';

  export default {
    data() {
      return {
        value: 'https://example.com',
        size: 300,
      };
    },
    components: {
      QrcodeVue,
    },
  };
</script>

在 Vue 3 中配合 TypeScript 使用:

<template>
  <qrcode-vue
    :value="value"
    :level="level"
    :render-as="renderAs"
    :background="background"
    :foreground="foreground"
    :gradient="gradient"
    :gradient-type="gradientType"
    :gradient-start-color="gradientStartColor"
    :gradient-end-color="gradientEndColor"
    :image-settings="imageSettings"
  />
</template>
<script setup lang="ts">
  import { ref } from 'vue';
  import QrcodeVue from 'qrcode.vue';
  import type {
    Level,
    RenderAs,
    GradientType,
    ImageSettings,
  } from 'qrcode.vue';

  const value = ref('qrcode');
  const level = ref<Level>('M');
  const renderAs = ref<RenderAs>('svg');
  const background = ref('#ffffff');
  const foreground = ref('#000000');
  const margin = ref(0);

  // 可传入二维码图片相关的属性,支持二维码 LOGO;
  const imageSettings = ref<ImageSettings>({
    src: 'https://github.com/scopewu.png',
    width: 30,
    height: 30,
    // x: 10,
    // y: 10,
    excavate: true,
  });

  // 可传入渐变相关的属性,支持渐变:
  const gradient = ref(false);
  const gradientType = ref<GradientType>('linear');
  const gradientStartColor = ref('#000000');
  const gradientEndColor = ref('#38bdf8');
</script>

Component props

value

  • 类型:string
  • 默认值:''

二维码的内容值。

size

  • 类型:number
  • 默认值:100

二维码大小。

render-as

  • 类型:RenderAs('canvas' | 'svg')
  • 默认值:canvas

生成二维码的 HTML 标签,可选 canvassvg。其中 svg 可以用于 SSR。

margin

  • 类型:number
  • 默认值:0

定义空白区的宽度应该是多少。

level

  • 类型:Level('L' | 'M' | 'Q' | 'H')
  • 默认值:L

二维码的容错能力等级,取值为 ‘L’, ‘M’, ‘Q’, ‘H’ 之一。了解更多,维基百科:QR_code

background

  • 类型:string
  • 默认值:#ffffff

二维码背景颜色。

foreground

  • 类型:string
  • 默认值:#000000

二维码前景颜色。

image-settings

  • 类型: ImageSettings

  • 默认值: {}

    export type ImageSettings = {
      src: string; // 图片的地址。
      x?: number; // 水平横向偏移。没有设定值时,图片剧中
      y?: number; // 垂直竖向偏移。没有设定值时,图片剧中
      height: number; // 图片的高度
      width: number; // 图片的宽度
      // 是否“挖掘”图像周围的模块。
      // 这意味着嵌入图像重叠的任何模块都将使用背景颜色。
      // 使用此选项可确保图像周围的边缘清晰。嵌入透明图像时也很有用。
      excavate?: boolean;
    };

二维码图片 logo 配置。

gradient

  • 类型: boolean
  • 默认值: false

启用二维码的渐变填充。

gradient-type

  • 类型: GradientType('linear' | 'radial')
  • 默认值: linear

指定渐变类型。

gradient-start-color

  • 类型: string
  • 默认值: #000000

渐变的起始颜色。

gradient-end-color

  • 类型: string
  • 默认值: #ffffff

渐变的结束颜色。

class

  • 类型:string
  • 默认值:''

传递给二维码根元素的类名。

QrcodeVue 3.5+

QrcodeVue 3.5+ 后导出独立的 QrcodeCanvasQrcodeSvg 组件,为此修改了 rollup 的配置:

// rollup.config.js

-    exports: 'default',
+    exports: 'named',

现在在 common.js 和 cdn 直接引用 QrcodeVue 需要使用 default 字段:

const QrcodeVue = require('qrcode.vue').default;
const { default: QrcodeVue, QrcodeCanvas, QrcodeSvg } = require('qrcode.vue');
<!--With HTML-->
<div id="root">
  <p class="flex space-x">
    <qrcode-vue :value="test" render-as="svg"></qrcode-vue>
    <qrcode-canvas :value="test"></qrcode-canvas>
  </p>
  <p><input v-model="test" /></p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@3.5/dist/vue.global.prod.js"></script>
<script src="https://cdn.jsdelivr.net/npm/qrcode.vue@3.5/dist/qrcode.vue.browser.min.js"></script>

<script>
  Vue.createApp({
    data() {
      return {
        test: 'Hello World',
      };
    },
    components: {
      QrcodeVue: QrcodeVue.default,
      QrcodeCanvas: QrcodeVue.QrcodeCanvas,
    },
  }).mount('#root');
</script>

软件许可

copyright © 2021 scopewu, license by MIT

本文作者 吴文俊,转载请注明来源链接:

本文链接: https://tie.pub/blog/qrcode-vue/