2016-04-12 38 views
4

我对将主要被用来扫描条形码,然后通过电子邮件将CSV文件(.txt)附件的离子的Android/iOS应用工作将所有扫描都包含到通讯组中。此应用程序使用ngCordova +科尔多瓦电子邮件生成器插件(科尔多瓦插件电子邮件作曲家)的电子邮件功能。当启动邮件发送中的Android(6.0.1在Nexus 5),我得到以下控制台错误:

TypeError: $cordovaEmailComposer.isAvailable is not a function

所有其他进程似乎正常工作(如正确的依赖于平台的文件路径生成,附件格式和世代)和ngCordova + Cordova条码扫描器插件(phonegap-plugin-barcodescanner)正常工作。

我也有科尔多瓦电子邮件作曲家v0.8.3总是返回上.isAvailable()在Android的“假”的一些问题,但我成功地解决此使用v0.8.2工作。这两个版本都会出现这个新问题。

请参阅下面有关包含问题代码的Angular服务部分。 scanData是一项简单的服务,可暂时保存扫描的信息,包括路径和所有扫描的阵列。 processFile是一个处理所有文件处理的服务(例如保存,加载,删除,动态生成文件名,确定正确的文件路径)。

angular 
    .module('app') 
    .factory('emailService', ['$ionicPlatform', '$ionicPopup', '$ionicHistory', '$cordovaEmailComposer', 'scanData', 'processFile', emailService]); 

function emailService($ionicPlatform, $ionicPopup, $cordovaEmailComposer, $ionicHistory, scanData, processFile) { 
    var path = scanData.filePath, 
     file = scanData.fileName; 

    var service = { 
    send: send 
    }; 

    return service; 

//------------------------------ 

    /** 
    * Send email 
    */ 
    function send() { 
    processFile.save('csv') 
     .then(function() { 
     console.info('CSV file saved.'); 

     sendEmail(); 

     }, function (error) { 
     console.error(error); 
     //TODO: handle failed save attempt 
     }); 
    } 

    /** 
    * Invoke cordova email composer to open email client and create pre-defined draft with attachment. 
    */ 
    function sendEmail() { 
    console.info('Sending email...'); 

    $ionicPlatform.ready(function() { 
     $cordovaEmailComposer 
     .isAvailable() //ERROR OCCURS HERE 
     .then(function() { 
      console.info('Email app available.'); 

      var attachmentPath = getAttachmentPath(); 

      console.info('Attachment path: ' + attachmentPath); 

      var email = { 
      to: '[email protected]', 
      attachments: [ attachmentPath ], 
      subject: 'Incoming Scan', 
      body: 'See attached.' 
      }; 

      $cordovaEmailComposer 
      .open(email) 
      .then(null, function() { 
       clearDataPopup(); 
      }); 

     }, function() { 
      console.warn('Email app not available.'); 
     }); 
    }); 
    } 

而且,所有组件/依赖是先进的日期,我已经运行ionic state reset没有变化。我还没有机会在iOS上进行测试,但只要我能这样做就会更新问题。 Android是目前最重要的平台,所以我现在关注它。

这很可能只是我忽略的一些愚蠢的小东西,但我目前处于亏损状态。

回答

2

您在依赖关系序列中有不匹配。记住一件事,在DI Inline数组内部注入依赖关系的顺序会增加你应该让它们各自的控制器工厂函数中的实例具有相同数量的参数。您$ionicHistory错过了在控制器工厂功能的第三位注入。

.factory('emailService', ['$ionicPlatform', '$ionicPopup', '$ionicHistory', '$cordovaEmailComposer', 'scanData', 'processFile', emailService]); 
                 //VVVVV//this was missing 
    function emailService($ionicPlatform, $ionicPopup, $ionicHistory, $cordovaEmailComposer, $ionicHistory, scanData, processFile) { 

由于缺少参数$cordovaEmailComposer的持有的$ionicHistory

+0

你,先生的参考,是正确的。非常感谢你的支持! – ankur

+0

@ankur很高兴知道..谢谢:-) –

相关问题