angularJS 调用摄像头扫描二维码,输出结果

摘要:
zxing scanner[enable]=“scannerEnabled”(scanSuccess)=“onCodeResult($event)”[formats]=“['QR_CODE',void{this.availableDevices=设备;this.hasDevices=布尔(设备&

背景:在一个angularJS的项目中,需要添加点击某个按钮之后调用手机的照相机,扫描二维码输出所扫描二维码的结果,利用这个结果来处理其他的事情。

效果如下

angularJS 调用摄像头扫描二维码,输出结果第1张

扫描玩二维码把结果alert出来如下图

angularJS 调用摄像头扫描二维码,输出结果第2张

扫描二维码

angularJS 调用摄像头扫描二维码,输出结果第3张

 

1.在本地需要安装下面的包文件

在现有的angularJS项目中,执行下面的命令

npm install
npm i @zxing/browser@latest --save
npm i @zxing/library@latest --save
npm i @zxing/ngx-scanner@latest --save
2.在module 文件中引入下面的代码
// some.module.ts
import { NgModule } from '@angular/core';

// your very important imports here

// the scanner!
import { ZXingScannerModule } from '@zxing/ngx-scanner';

// your other nice stuff

@NgModule({
  imports: [ 
    // ...
    // gets the scanner ready!
    ZXingScannerModule,
    // ...
  ]
})
export class SomeModule {}
3.html上面添加下面的代码

【scannerEnabled】指的是是否启动照相机,true的场合启动,false的场合不启动

<zxing-scanner [enable]="scannerEnabled" (scanSuccess)="onCodeResult($event)" [formats]="['QR_CODE', 'EAN_13', 'CODE_128', 'DATA_MATRIX']">
            </zxing-scanner>

备注:zxing标签的所有属性,根据自己的需求来定

中文的

angularJS 调用摄像头扫描二维码,输出结果第4张

英文

angularJS 调用摄像头扫描二维码,输出结果第5张

  

<zxing-scanner [enable]="scannerEnabled" [(device)]="desiredDevice" [torch]="torch" (torchCompatible)="onTorchCompatible($event)" (camerasFound)="camerasFoundHandler($event)" ( cameraNotFound)="camerasNotFoundHandler($event)" (scanSuccess)="scanSuccessHandler($event)" (scanError)="scanErrorHandler($event)" (scanFailure)="scanFailureHandler($event)" (scanComplete)="scanCompleteHandler( $事件)”
4.在component.ts文件中写入下面的代码
    onCodeResult(resultString: string) {
        this.qrResultString = resultString;
        alert(resultString);
    }

备注:根据自己的需求来定

 clearResult(): void {
    this.qrResultString = null;
  }

  onCamerasFound(devices: MediaDeviceInfo[]): void {
    this.availableDevices = devices;
    this.hasDevices = Boolean(devices && devices.length);
  }

  onCodeResult(resultString: string) {
    this.qrResultString = resultString;
  }

  onDeviceSelectChange(selected: string) {
    const selectedStr = selected || '';
    if (this.deviceSelected === selectedStr) { return; }
    this.deviceSelected = selectedStr;
    const device = this.availableDevices.find(x => x.deviceId === selected);
    this.deviceCurrent = device || undefined;
  }

  onDeviceChange(device: MediaDeviceInfo) {
    const selectedStr = device?.deviceId || '';
    if (this.deviceSelected === selectedStr) { return; }
    this.deviceSelected = selectedStr;
    this.deviceCurrent = device || undefined;
  }

  openFormatsDialog() {
    const data = {
      formatsEnabled: this.formatsEnabled,
    };

    this._dialog
      .open(FormatsDialogComponent, { data })
      .afterClosed()
      .subscribe(x => {
        if (x) {
          this.formatsEnabled = x;
        }
      });
  }

  onHasPermission(has: boolean) {
    this.hasPermission = has;
  }

  openInfoDialog() {
    const data = {
      hasDevices: this.hasDevices,
      hasPermission: this.hasPermission,
    };

    this._dialog.open(AppInfoDialogComponent, { data });
  }

  onTorchCompatible(isCompatible: boolean): void {
    this.torchAvailable$.next(isCompatible || false);
  }

  toggleTorch(): void {
    this.torchEnabled = !this.torchEnabled;
  }

  toggleTryHarder(): void {
    this.tryHarder = !this.tryHarder;
  }

之后运行angularJS项目,测试是没问题的。

相关资料

https://github.com/zxing-js/ngx-scanner/wiki/Getting-Started

https://www.npmjs.com/package/@zxing/ngx-scanner

https://www.npmjs.com/package/angular-weblineindia-qrcode-scanner

演示地址

https://zxing-ngx-scanner.stackblitz.io/

 

免责声明:文章转载自《angularJS 调用摄像头扫描二维码,输出结果》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Lecture10_几何1(介绍)_GAMES101 课堂笔记apache maven安装教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

从微信授权到JWT认证——玩转token之路

一、写在微信前 是前段时间还是上几年来着,我记不太清了,只记得那个时候的我手机流量每个月是150MB,当然不是这个数字问题,而是由该数字引发的周围人对本人的各种调侃,使大家惊讶的是一个月150MB流量竟然用不完,而使我不解的是他们竟然接受不了用不完这个事实。那个时候的我,对流量的认知,更多的是手机上,直到后来参加工作,才开始广泛起来。 流量这个东西,很神奇...

easyuitabs(选项卡)

配置好easyui环境 1.笔记: tabs(选项卡) class: //<div style="700px;height:auto"></div> 是否可以关闭:closable:true 选项卡标签的宽度:data-options="tabWidth:200" 下拉菜单: <div id="mm">   <di...

nginx+tomcat+java部署总结

昨天部署了一下nginx+tomcat+java出现了很多问题,以下为整理总结。 使用了两种部署方式,一种是源码部署,一种是war部署。 java源码部署总结: 环境:nginx+tomcat 部署方式:源码部署 1 源码目录/chroot2/test/schedule 目录下面就是所有源码了 2 tomcat 位置: /usr/local/tomc...

【Linux】freetds安装配置连接MSSQL

我使用的是freetds-0.91,下载地址:http://pan.baidu.com/s/1hq68rZY 安装编译(根据需要unixodbc): [root@zabbixserver / ]# tar zxvf freetds-stable.tgz [root@zabbixserver / ]# cd freetds-0.91 [root@zabbix...

WPF自定义控件与样式(10)-进度控件ProcessBar自定义样

一.前言   申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接。   本文主要内容: ProcessBar自定义标准样式; ProcessBar自定义环形进度样式; 二.ProcessBar标准样式   效果图:     P...

python用户管理系统

学Python这么久了,第一次写一个这么多的代码(300多行,重复的代码挺多的,比较水),但是也挺不容易的 自定义函数+装饰器,每一个模块写的一个函数 很多地方能用装饰器(逻辑跟不上,有的地方没用),包括双层装饰器(不会),很多地方需要优化,重复代码太多 我还是把我的流程图拿出来吧,虽然看着比上次的垃圾,但是我也做了一个小时,不容易! 好像是挺丑的(表示...