2017-02-25 23 views
0

我想在Cordova和相關插件的Angular2應用上使用條形碼掃描儀。Angular2 + Cordova +條碼掃描器插件:Android的行爲

我現在可以在Android上進行測試,並且我正在收到奇怪的行爲。我無法找到問題,無論是插件還是我的代碼。

掃描工作正常,但是從相機活動切換到應用程序webview之後,就像事件和數據綁定處理不好。

當掃描結果返回時,我在視圖上設置了一個屬性來告訴應用掃描狀態是成功的,所以我的角度視圖顯示了一些按鈕來打開鏈接。

有時可以工作,其他不可以。另外,如果我重新掃描代碼,我取消它,讓相機的活動它讓我看到前面不顯示結果..或有時只是沒有在所有的工作:(

JAVASCRIPT:

export class ScanQRView extends View { 

    private scanState: string = 'ready'; 


    [....] 


    public scan(): void { 

     if (this.utility.inApp('barcodeScanner')) { 

      cordova.plugins.barcodeScanner.scan(
       (result) => { 
        setTimeout(() => { 
         if (!result.cancelled) { 
          this.onResult(result.text); 
          console.log(this.scanState); 
         } else { 
          this.onResult(false); 
         } 
        }, 500); 
       }, 
       (error) => this.onResult(false), { 
        preferFrontCamera : true, 
        showFlipCameraButton : true, 
        showTorchButton : true, 
        torchOn: true, 
        //prompt : "Place a barcode inside the scan area", 
        resultDisplayDuration: 500, 
        formats : "QR_CODE", 
        disableAnimations : true, 
        disableSuccessBeep: false 
       } 
      ); 
     } 
    } 


    public onResult(result: string|boolean): void { 
     if (result === false) { 
      this.scanState = 'error'; 
     } else { 
      this.link = result.toString(); 
      this.scanState = 'success'; 
     } 
    } 


} 

模板:

<div class="row scan" *ngIf="scanState == 'ready'"> 
    <div class="col-xs-3"></div> 
    <div class="col-xs-6"> 
     <button type="button" class="btn btn-info btn-lg btn-block fade-in-out-button" (click)="scan()"> 
      <i class="fa fa-camera" aria-hidden="true"></i> 
     </button> 
    </div> 
    <div class="col-xs-3"></div> 
</div> 


<div class="row scan" *ngIf="scanState == 'success'"> 
    <div class="col-xs-12"> 
     <div class="btn-group"> 
      <div class="btn-group"> 
       <button type="button" class="btn btn-info btn-lg" (click)="cancel()"> 
        <i class="fa fa-refresh" aria-hidden="true"></i> 
       </button> 
      </div> 
      <div class="btn-group"> 
       <button type="button" class="btn btn-info btn-lg fade-in-out-button" (click)="openLink()"> 
        <i class="fa fa-link" aria-hidden="true"></i> Apri 
       </button> 
      </div> 
     </div> 
    </div> 
</div> 

我試圖與不定時,沒有什麼變化.. 人有類似的問題

回答

0

你可以使用一個承諾:

public scan(): void { 
this.promiseScan().then(result => { 
    this.resultQrcode = result; 
}).catch((ex) => { 
    console.log(ex); 
}); 

}

public promiseScan(): any { 
return new Promise((resolve, reject) => { 
    cordova.plugins.barcodeScanner.scan(
    (result) => { 
     return resolve(result.text); 
    }, 
    (error) => { 
     return reject('ERROR'); 
    } 
); 
}); 

}