gpt4 book ai didi

javascript - 在 Ionic 应用程序中发送电子邮件会导致以下错误 : TypeError: $cordovaEmailComposer. isAvailable is not a function

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:14:11 24 4
gpt4 key购买 nike

我正在开发一个 Ionic Android/iOS 应用程序,该应用程序主要用于扫描条形码,然后通过电子邮件将包含所有扫描件的 CSV (.txt) 附件发送到通讯组。此应用程序使用 ngCordova + Cordova Email Composer 插件 (cordova-plugin-email-composer) 来实现电子邮件功能。在 Android(Nexus 5 上的 6.0.1)中启动电子邮件发送后,我收到以下控制台错误:

TypeError: $cordovaEmailComposer.isAvailable is not a function

所有其他进程似乎都正常工作(例如正确的平台相关文件路径生成、附件格式和生成)并且 ngCordova + Cordova 条码扫描器插件 (phonegap-plugin-barcodescanner) 正常运行。

我确实遇到了一些问题,Cordova Email Composer v0.8.3 总是在 Android 中的 .isAvailable() 上返回“false”,但是我使用 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: 'foo@bar.com',
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 是目前最重要的平台,所以我现在主要关注它。

这很可能只是我忽略的一些愚蠢的小事情,但我目前不知所措。

最佳答案

您的依赖顺序不匹配。记住一件事,你在 DI 内联数组中注入(inject)依赖项的顺序确实添加了你应该在 Controller 工厂函数中获得它们各自的实例一个相同数量的参数。你 $ionicHistory 被遗漏在 Controller 工厂功能的第三位注入(inject)。

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

因为缺少参数 $cordovaEmailComposer 持有 $ionicHistory 的引用

关于javascript - 在 Ionic 应用程序中发送电子邮件会导致以下错误 : TypeError: $cordovaEmailComposer. isAvailable is not a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36584274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com