I'm implementing a QRCode scanner in a new app built with ionic 4.0.6 and I have followed the documentation about how to integrate the scanner.
Here the docs: https://ionicframework.com/docs/native/barcode-scanner/
Ionic info:
Ionic:
ionic (Ionic CLI) : 4.0.6 (/Users/christiangiupponi/node_modules/ionic)
Ionic Framework : ionic-angular 3.9.2
@ionic/app-scripts : 3.2.1
Cordova:
cordova (Cordova CLI) : 7.0.1
Cordova Platforms : android 6.2.3
System:
Android SDK Tools : 26.1.1
ios-deploy : 1.9.4
NodeJS : v10.8.0 (/usr/local/bin/node)
npm : 5.0.3
OS : macOS High Sierra
Xcode : Xcode 10.1 Build version 10B61
Environment:
ANDROID_HOME : /Users/christiangiupponi/Library/Android/sdk
This is my code:
app.modules.ts
import { BrowserModule } from '@angular/platform-browser';
import { ErrorHandler, NgModule } from '@angular/core';
import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
import { SplashScreen } from '@ionic-native/splash-screen';
import { StatusBar } from '@ionic-native/status-bar';
import { MyApp } from './app.component';
import { HomePage } from '../pages/home/home';
import { QrCodeAllModule } from 'ngx-qrcode-all';
import { BarcodeScanner } from '@ionic-native/barcode-scanner/ngx';
@NgModule({
declarations: [
MyApp,
HomePage
],
imports: [
BrowserModule,
IonicModule.forRoot(MyApp),
QrCodeAllModule
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
HomePage
],
providers: [
StatusBar,
SplashScreen,
BarcodeScanner,
{provide: ErrorHandler, useClass: IonicErrorHandler}
]
})
export class AppModule {}
home.html
<ion-header>
<ion-navbar>
<ion-title>
Ionic Blank
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<div id="qrcodeid">
<qr-code-all [qrCodeType]="url"
[qrCodeValue]="'SK is the best in the world!'"
[qrCodeVersion]="'3'"
[qrCodeECLevel]="'M'"
[qrCodeColorLight]="'#ffffff'"
[qrCodeColorDark]="'#000000'"
[width]="11"
[margin]="4"
[scale]="4"
[scanQrCode]="false">
</qr-code-all>
</div>
<button ion-button (click)="openScanner()">Open</button>
</ion-content>
And this is the home.ts file
import { Component } from '@angular/core';
import { BarcodeScanner } from '@ionic-native/barcode-scanner/ngx';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
constructor(private barcodeScanner: BarcodeScanner) {
}
openScanner(){
this.barcodeScanner.scan().then(barcodeData => {
console.log('Barcode data', barcodeData);
}).catch(err => {
console.log('Error', err);
});
}
}
As you can see it doesn't do much, just a button to call openScanner function.
If I run it on my device (Android 7) I see a blank page.
Using Chrome's tools I inspected the app and I can see:
ERROR Error: Uncaught (in promise): TypeError: Object(...) is not a function
TypeError: Object(...) is not a function
at BarcodeScanner.scan (vendor.js:81810)
at new HomePage (main.js:61)
at createClass (vendor.js:13119)
at createDirectiveInstance (vendor.js:12962)
at createViewNodes (vendor.js:14420)
at createRootView (vendor.js:14309)
at callWithDebugContext (vendor.js:15734)
at Object.debugCreateRootView [as createRootView] (vendor.js:15017)
at ComponentFactory_.create (vendor.js:11914)
at ComponentFactoryBoundToModule.create (vendor.js:4666)
at c (polyfills.js:3)
at Object.reject (polyfills.js:3)
at NavControllerBase._fireError (vendor.js:53655)
at NavControllerBase._failed (vendor.js:53648)
at vendor.js:53695
at t.invoke (polyfills.js:3)
at Object.onInvoke (vendor.js:5396)
at t.invoke (polyfills.js:3)
at r.run (polyfills.js:3)
at polyfills.js:3
Inspecting the library I can see the function and it has some documentation on it how use, and the code is the same I addedd in my method.
Where is the error?
Check your project type in ionic.config.json file.
If the type is "ionic-angular", then install 4.x.x version. In your case
npm i -s @ionic-native/[email protected]
If the type is "angular", then install 5.x.x-beta version
npm i -s @ionic-native/[email protected]
Note:
Add ngx at the end of import only if you are using Angular 6
import { BarcodeScanner } from '@ionic-native/barcode-scanner/ngx';
if not remove ngx from the import both in app.module.ts and app.component.ts
import { BarcodeScanner } from '@ionic-native/barcode-scanner';
Refencence:https://github.com/ionic-team/ionic/issues/15225#issuecomment-414074074
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With