Resource Base
Table of contents

Thanks for downloading Dynamsoft Barcode Reader Package!

Your download will start shortly. If your download does not begin, click here to retry.

JavaScript Hello World Sample - Vue Vue logo

Vue is a progressive framework for building user interfaces. Check out the following guide on how to implement Dynamsoft Barcode Reader JavaScript SDK (hereafter called “the library”) into a Vue application.

Official Sample

Preparation

Make sure you have node, yarn and Vue CLI installed. node 14.16.0 , yarn 1.22.10 and @vue/cli 4.5.11 are used in the example below.

Create the sample project

Create a Bootstrapped Raw React Application

vue create read-video-vue

CD to the root directory of the application and install the dependencies

yarn add dynamsoft-javascript-barcode

Start to implement

Add a file “dbr.js” under “/src/” to configure the library

import DBR from "dynamsoft-javascript-barcode";
DBR.engineResourcePath = "https://cdn.jsdelivr.net/npm/dynamsoft-javascript-barcode@8.8.3/dist/";
export default DBR;

Note:

  • There are multiple settings available for the configuration, here we only set the engineResourcePath which is essential for the library to get the necessary resources at runtime.

Add a file BarcodeScanner.vue under “/components/” as the BarcodeScanner component

  • In BarcodeScanner.vue, add code for initializing and destroying the library.
<template>
  <div id="barcodeScannerUI"></div>
</template>

<script>
import DBR from "../dbr";

export default {
  data() {
    return {
      bDestroyed: false,
      pScanner: null,
    };
  },
  async mounted() {
    try {
      let scanner = await (this.pScanner =
        this.pScanner || DBR.BarcodeScanner.createInstance());
      if (this.bDestroyed) {
        scanner.destroy();
        return;
      }
      this.$el.appendChild(scanner.getUIElement());
      await scanner.open();
    } catch (ex) {
      console.error(ex);
    }
  },
  async beforeDestroy() {
    if (this.pScanner) {
      (await this.pScanner).destroy();
      this.bDestroyed = true;
    }
  },
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
#barcodeScannerUI {
  width: 100%;
  height: 100%;
}
</style>

Note:

  • The element “barcodeScannerUI” is used to build the UI for the library in this line

    this.$el.appendChild(scanner.getUIElement());
    
  • To release resources timely, the BarcodeScanner instance is destroyed with the component in the callback beforeDestroy .

Add the BarcodeScanner component in HelloWorld.vue

<template>
  <div id="UIElement">
    <BarcodeScanner></BarcodeScanner>
  </div>
</template>

<script>
import BarcodeScanner from "./BarcodeScanner";

export default {
  name: "HelloWorld",
  props: {},
  components: {
    BarcodeScanner,
  },
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
#UIElement {
  margin: 2vmin auto;
  text-align: center;
  font-size: medium;
  height: 40vh;
  width: 80vw;
}
</style>
  • Try running the project.
yarn serve

If you followed all the steps correctly, you will have a working page that turns one of the cameras hooked to or built in your computer or mobile device into a barcode scanner. However, the found barcodes are not displayed anywhere yet. At the same time, there is a short delay for the initialization of the library during which nothing happens and is not user-friendly. The following takes care of these two issues.

Update HelloWorld.vue

  • Change the template
<template>
  <div className="helloWorld">
    <div id="UIElement">
      <span style="font-size: x-large" v-if="!libLoaded">Loading Library...</span>
      <BarcodeScanner
        v-if="bShowScanner"
        v-on:appendMessage="appendMessage"
      ></BarcodeScanner>
    </div>
    <input type="text" id="resultText" v-model="resultValue" readonly="true" />
  </div>
</template>
  • Add style for the “input” element
#resultText {
    display: block;
    margin: 0 auto;
    padding: 0.4rem 0.8rem;
    color: inherit;
    width: 80vw;
    border: none;
    font-size: 1rem;
    border-radius: 0.2rem;
    text-align: center;
}
  • Change the script
<script>
import DBR from "../dbr";
import BarcodeScanner from "./BarcodeScanner";

export default {
  name: "HelloWorld",
  props: {
    msg: String,
  },
  components: {
    BarcodeScanner,
  },
  data() {
    return {
      resultValue: "",
      libLoaded: false,
      bShowScanner: false,
    };
  },
  async mounted() {
    try {
      //Load the library on page load to speed things up.
      await DBR.BarcodeScanner.loadWasm();
      this.libLoaded = true;
      this.showScanner();
    } catch (ex) {
      alert(ex.message);
      throw ex;
    }
  },
  methods: {
    showScanner() {
      this.bShowScanner = true;
    },
    appendMessage(message) {
      switch (message.type) {
        case "result":
          this.resultValue = message.format + ": " + message.text;
          break;
        case "error":
          this.resultValue = message.msg;
          break;
        default:
          break;
      }
    },
  },
};
</script>

NOTE :

  • The method loadWasm() in the function mounted() initializes the library in the background. The scanner UI is only shown when the initialization finishes.
  • The method appendMessage() is used to show the result text on the page.
  • In BarcodeScanner.vue, use the event onFrameRead and the parent method appendMessage() to return the results.
<script>
import DBR from "../dbr";

export default {
  //Omitted code...
  async mounted() {
    try {
      //Omitted code...
      this.$el.appendChild(scanner.getUIElement());      
      scanner.onFrameRead = (results) => {
        for (let result of results) {
          this.$emit("appendMessage", {
            format: result.barcodeFormatString,
            text: result.barcodeText,
            type: "result",
          });
        }
      };
      await scanner.open();
    } catch (ex) {
      this.$emit("appendMessage", { msg: ex.message, type: "error" });
      console.error(ex);
    }
  },
  //Omitted code...
};
</script>

NOTE :

  • The event onFrameRead is triggered upon reading of each frame. If barcodes are found on that frame, the results will be returned and shown on the page.

After the above changes, the application is made more user-friendly and the barcode text is displayed on the page right away. You can start implementing your own business workflow and make the application useful.

This page is compatible for:

Version 7.5.0

Is this page helpful?

YesYes NoNo

In this article:

latest version

    • Latest version
    • Version 8.8.0
    • Version 8.6.3
    • Version 8.6.1
    • Version 8.6.0
    • Version 8.4.0
    • Version 8.2.5
    • Version 8.2.3
    • Version 8.2.1
    • Version 8.2.0
    • Version 8.1.3
    • Version 8.1.2
    • Version 8.1.0
    • Version 8.0.0
    • Version 7.6.0
    • Version 7.5.0
    Change +
    © 2003–2021 Dynamsoft. All rights reserved.
    Privacy Statement / Site Map / Home / Purchase / Support