A set of Vue.js components, allowing you to detect and decode QR codes, without leaving the browser.
QrcodeStream
accesses the device camera and continuously scans incoming frames.QrcodeDropZone
renders to an empty region where you can drag-and-drop images to be decoded.QrcodeCapture
is a classic file upload field, instantly scanning all files you select.All components are responsive. Beyond that, close to zero styling. Make them fit your layout. Usage is simple and straight forward:
<qrcode-stream @decode="onDecode"></qrcode-stream>
methods: {
onDecode (decodedString) {
// ...
}
}
Run
npm install vue-qrcode-reader
You can import the components independantly
import { QrcodeStream, QrcodeDropZone, QrcodeCapture } from 'vue-qrcode-reader'
const MyComponent = {
components: {
QrcodeStream,
QrcodeDropZone,
QrcodeCapture
},
// ...
))
or register all of them globally right away
import Vue from "vue";
import VueQrcodeReader from "vue-qrcode-reader";
Vue.use(VueQrcodeReader);
Include the following JS file:
https://unpkg.com/vue-qrcode-reader/dist/VueQrcodeReader.umd.min.js
Make sure to include it after Vue:
<script src="./vue.js"></script>
<script src="./VueQrcodeReader.umd.min.js"></script>
All components are automatically registered globally. Use kebab-case to reference them in your templates:
<qrcode-stream></qrcode-stream>
<qrcode-drop-zone></qrcode-drop-zone>
<qrcode-capture></qrcode-capture>
Modern devices sometimes have multiple rear cameras. Not all are optimal for scanning QR codes. For example wide angle, infrared and virtual cameras. With the current web API it's hard to pick the right camera automatically. It's technically possible to let the user make that decision. For example by displaying list of installed cameras and letting the user select the right one. However, this is a user experience trade-off. Native QR code reader applications don't face this trade-off. That's why we want to find a different solution.
Please create a GitHub issue from the wrong camera selected template and follow the instructions in the text.
QrcodeStream
.init
event to investigate errors.