我正在开发一个应用程序来读取正在使用BarcodeScanner的代码,但是当我在设备上执行应用程序时,会得到以下错误
**
**在我的iPhone6上运行错误,使用离子Object(_WEBPACK_IMPORTED_MODULE_1_ionic_native_core_"cordova")is错误运行时错误DevApp,而不是函数。(在'Object(_WEBPACK_IMPORTED_MODULE_1_ionic_native_core_"cordova")(this,“扫描”,{“callbackOrder”:“反向”},参数)‘,'Object(_WEBPACK_IMPORTED_MODULE_1_ionic_native_core_"cordova")'is是对象的一个实例)
在离子服务器中执行时显示的错误,错误TypeError: Object(.)BarcodeScanner.scan (index.js:31) at MenuPage.webpackJsonp.101.MenuPage.scanQR (menu.ts:53) at Object.eval as handleEvent at handleEvent (core.js:13589) at callWithDebugContext (core.js:15098) Object.debugHandleEvent as handleEvent at dispatchEvent (core.js:10004) at core.js:10629 at HTMLButtonElement。(platform-browser.js:2628) at t.invokeTask (polyfills.js:3) **
一开始,我的应用程序module.ts没有识别出BarcodeScanner,因为在providers me中调用它时,TS2322:键入'BarcodeScannerOriginal‘不能指定为'Provider’。键入“BarcodeScannerOriginal”不能指定键入“FactoryProvider”。属性'provide‘在'BarcodeScannerOriginal’类型中缺失
** Menu.html
<ion-header class="toolbar">
<ion-navbar>
<ion-title>Scan</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding class="Scan">
<div class="row">
<div class="col">
<h2>Scan your QR Code Here</h2>
</div>
<div class="col">
<h3>{{eventTitle}}</h3>
</div>
</div>
<button ion-button block color="secondary" class="Scan-button" (click)="scanQR()" [disabled]="loading">{{buttonText}}</button>
</ion-content>
Menu.ts
import { Component } from '@angular/core';
import {Platform} from "ionic-angular";
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { SplashScreen } from '@ionic-native/splash-screen';
import { StatusBar } from '@ionic-native/status-bar';
import { ToastController } from 'ionic-angular';
import { BarcodeScanner, BarcodeScannerOptions } from '@ionic-native/barcode-scanner/ngx';
/**
* Generated class for the MenuPage page.
*
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-menu',
templateUrl: 'menu.html',
})
export class MenuPage {
public scannedText: string;
public buttonText: string;
public loading: boolean;
private eventId: number;
public eventTitle: string;
num: string;
// @ts-ignore
constructor(private _nav: NavController,
private _navParams: NavParams,
private _barcodeScanner: BarcodeScanner) {
}
ionViewDidLoad() {
this.eventId = this._navParams.get('eventId');
this.eventTitle = this._navParams.get('eventTitle');
this.buttonText = "Scan";
this.loading = false;
}
public scanQR() {
this.buttonText = "Loading..";
this.loading = true;
this._barcodeScanner.scan().then((barcodeData) => {
if (barcodeData.cancelled) {
console.log("User cancelled the action!");
this.buttonText = "Scan";
this.loading = false;
return false;
}
console.log("Scanned successfully!");
console.log(barcodeData);
this.goToResult(barcodeData);
}, (err) => {
console.log(err);
});
}
private goToResult(barcodeData) {
this._nav.push(ScanResultPage, {
scannedText: barcodeData.text
});
}
}
app-module.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 {MenuPage} from "../pages/menu/menu";
import { BarcodeScanner } from '@ionic-native/barcode-scanner/ngx';
import { HttpClientModule } from '@angular/common/http';
import { FormsModule } from '@angular/forms';
import {HttpModule} from "@angular/http";
// @ts-ignore
@NgModule({
declarations: [
MyApp,
HomePage,
MenuPage
],
imports: [
BrowserModule, HttpClientModule,
IonicModule.forRoot(MyApp),
HttpModule
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
HomePage,
MenuPage
],
providers: [
StatusBar,
SplashScreen,
BarcodeScanner,
{provide: ErrorHandler, useClass: IonicErrorHandler}
]
})
export class AppModule {}
发布于 2019-02-11 22:08:29
我猜你在Ionic 3上,但是你使用的是Ionic 4支持的本地插件版本。
溶液
卸载cordova和离子本机插件
$ionic cordova plugin remove phonegap-plugin-barcodescanner
$npm uninstall @ionic-native/barcode-scanner
安装版本4。
$ ionic cordova plugin add phonegap-plugin-barcodescanner
$ npm install --save @ionic-native/barcode-scanner@4
并且不要在导入的末尾添加ngx。
import { BarcodeScanner } from '@ionic-native/barcode-scanner';
Note
如果您正在使用Ionic 3,请尝试使用Ionic v3指南而不是最新的指南。
离子v3指南https://ionicframework.com/docs/v3/native/barcode-scanner/
要获得完整的解释,您可以在这里找到我的另一个答案:https://stackoverflow.com/a/54474247/6617276
https://stackoverflow.com/questions/54637378
复制