<!DOCTYPE html>
<html>
<head>
<base href="."/>
<script type="text/javascript" charset="utf-8">
window.AngularVersionForThisPlunker = 'latest'
</script>
<title>Zxing-Scanner Demo</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script>
<script src="https://unpkg.com/zone.js/dist/zone.js"></script>
<script src="https://unpkg.com/zone.js/dist/long-stack-trace-zone.js"></script>
<script src="https://unpkg.com/reflect-metadata@0.1.3/Reflect.js"></script>
<script src="https://unpkg.com/systemjs@0.19.31/dist/system.js"></script>
<script src="config.js"></script>
<script>
System.import('app')
.catch(console.error.bind(console));
</script>
</head>
<body>
<app-root>loading...</app-root>
</body>
</html>
System.config({
//use typescript for compilation
transpiler: 'typescript',
//typescript compiler options
typescriptOptions: {
emitDecoratorMetadata: true
},
paths: {
'npm:': 'https://unpkg.com/'
},
//map tells the System loader where to look for things
map: {
'app': './src',
'@angular/core': 'npm:@angular/core/bundles/core.umd.js',
'@angular/common': 'npm:@angular/common/bundles/common.umd.js',
'@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
'@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
'@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
'@angular/http': 'npm:@angular/http/bundles/http.umd.js',
'@angular/router': 'npm:@angular/router/bundles/router.umd.js',
'@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
'@angular/animations': 'npm:@angular/animations/bundles/animations.umd.js',
'@angular/platform-browser/animations': 'npm:@angular/platform-browser/bundles/platform-browser-animations.umd.js',
'@angular/animations/browser': 'npm:@angular/animations/bundles/animations-browser.umd.js',
'@angular/core/testing': 'npm:@angular/core/bundles/core-testing.umd.js',
'@angular/common/testing': 'npm:@angular/common/bundles/common-testing.umd.js',
'@angular/compiler/testing': 'npm:@angular/compiler/bundles/compiler-testing.umd.js',
'@angular/platform-browser/testing': 'npm:@angular/platform-browser/bundles/platform-browser-testing.umd.js',
'@angular/platform-browser-dynamic/testing': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic-testing.umd.js',
'@angular/http/testing': 'npm:@angular/http/bundles/http-testing.umd.js',
'@angular/router/testing': 'npm:@angular/router/bundles/router-testing.umd.js',
'rxjs': 'npm:rxjs',
'async': 'npm:async',
'sharp': 'npm:sharp',
'text-encoding': 'npm:text-encoding@0.6.4/lib/encoding.js',
'typescript': 'npm:typescript@2.2.1/lib/typescript.js',
'@zxing/ngx-scanner': 'npm:@zxing/ngx-scanner@latest/bundles/ngx-scanner.umd.js',
'@zxing/library': 'npm:@zxing/library@latest'
},
//packages defines our app package
packages: {
app: {
main: './main.ts',
defaultExtension: 'ts'
},
rxjs: {
defaultExtension: 'js'
}
}
});
import { Component, VERSION, OnInit, ViewChild } from '@angular/core';
import { NgxZxingComponent } from '@zxing/ngx-scanner';
import { Result } from '@zxing/library';
@Component({
selector: 'app-root',
templateUrl: 'src/app.component.html',
})
export class AppComponent implements OnInit {
ngVersion = VERSION.full;
@ViewChild('scanner')
scanner: ZXingScannerComponent;
hasCameras = false;
hasPermission: boolean;
qrResultString: string;
availableDevices: MediaDeviceInfo[];
selectedDevice: MediaDeviceInfo;
ngOnInit(): void {
this.scanner.camerasFound.subscribe((devices: MediaDeviceInfo[]) => {
this.hasCameras = true;
console.log('Devices: ', devices);
this.availableDevices = devices;
// selects the devices's back camera by default
// for (const device of devices) {
// if (/back|rear|environment/gi.test(device.label)) {
// this.scanner.changeDevice(device);
// this.selectedDevice = device;
// break;
// }
// }
});
this.scanner.camerasNotFound.subscribe((devices: MediaDeviceInfo[]) => {
console.error('An error has occurred when trying to enumerate your video-stream-enabled devices.');
});
this.scanner.permissionResponse.subscribe((answer: boolean) => {
this.hasPermission = answer;
});
}
handleQrCodeResult(resultString: string) {
console.log('Result: ', resultString);
this.qrResultString = resultString;
}
onDeviceSelectChange(selectedValue: string) {
console.log('Selection changed: ', selectedValue);
this.selectedDevice = this.scanner.getDeviceById(selectedValue);
}
}
<div *ngIf="availableDevices">
<select (change)="onDeviceSelectChange($event.target.value)">
<option value="" [selected]="!selectedDevice">No Device</option>
<option *ngFor="let device of availableDevices" [value]="device.deviceId" [selected]="selectedDevice && device.deviceId === selectedDevice.deviceId">{{ device.label }}</option>
</select>
</div>
<div [hidden]="!hasCameras">
<zxing-scanner #scanner class="test-class" start="true" [device]="selectedDevice" (scanSuccess)="handleQrCodeResult($event)"></zxing-scanner>
<h2 *ngIf="!this.selectedDevice">No camera selected.</h2>
<p>
Result:
<strong>{{ qrResultString }}</strong>
</p>
</div>
<div *ngIf="!hasCameras && hasPermission === true">
<h1>Looks like your actual device does not has cameras, or I could no find'em. </h1>
</div>
<div *ngIf="hasPermission === undefined">
<h1>Waiting for permissions.</h1>
<blockquote>
<h2>If your device does not has cameras, no permissions will be asked.</h2>
</blockquote>
</div>
<div *ngIf="hasPermission === false">
<h1>You denied the camera permissions, we can't scan anything without it. 😪</h1>
</div>
<p>Angular version: {{ ngVersion }}</p>
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { ZXingScannerModule } from '@zxing/ngx-scanner';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
@NgModule({
imports: [
BrowserModule,
FormsModule,
CommonModule,
ZXingScannerModule.forRoot()
],
declarations: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule { }
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule)