Angularjs 使用ngCordova插件而不在app.js中调用它们?
多亏了爱奥尼亚,我的应用看起来不错。所有的核心信息都在那里,我只是添加了一些装饰——电子邮件、共享、媒体(其中一个功能是节拍器)等等 我无法让任何插件工作 我已经成功地使用了以前的Ionic应用程序,但是插件都是从内部调用的Angularjs 使用ngCordova插件而不在app.js中调用它们?,angularjs,cordova,plugins,ionic-framework,ngcordova,Angularjs,Cordova,Plugins,Ionic Framework,Ngcordova,多亏了爱奥尼亚,我的应用看起来不错。所有的核心信息都在那里,我只是添加了一些装饰——电子邮件、共享、媒体(其中一个功能是节拍器)等等 我无法让任何插件工作 我已经成功地使用了以前的Ionic应用程序,但是插件都是从内部调用的 .run(function($ionicPlatform) { $ionicPlatform.ready(function() { } } 事实上,Statusbar插件似乎工作正常,它是从内部调用的 我正在使用侧菜单启动器,附带内置选项卡 我想,我的问题是我
.run(function($ionicPlatform) {
$ionicPlatform.ready(function() {
}
}
事实上,Statusbar插件似乎工作正常,它是从内部调用的
我正在使用侧菜单启动器,附带内置选项卡
我想,我的问题是我有三个控制器文件。
main_ctrls.js-用于主应用程序
menu_ctrls.js-用于反馈和电子邮件等菜单页面,分析
extras_ctrls.js-用于节拍器等的“额外”部分
我将“ngCordova”作为每个模块中的依赖项,并使用ready函数从控制器中调用插件。这是电子邮件控制器
angular.module('menu.controllers', ['ngCordova'])
.controller('FeedCtrl', function($ionicPlatform, $scope, $cordovaEmailComposer) {
$ionicPlatform.ready(function() {
$cordovaEmailComposer.isAvailable().then(function() {
// is available
alert('Email is available');
}, function () {
// not available
alert('Email is NOT available');
});
var email = {
to: 'max@mustermann.de',
cc: 'erika@mustermann.de',
bcc: ['john@doe.com', 'jane@doe.com'],
attachments: [
'file://img/logo.png',
'res://icon.png',
'base64:icon.png//iVBORw0KGgoAAAANSUhEUg...',
'file://README.pdf'
],
subject: 'Cordova Icons',
body: 'How are you? Nice greetings from Leipzig',
isHtml: true
};
$cordovaEmailComposer.open(email).then(null, function () {
alert('Email discarded.');
});
})
});
我正在用Chrome inspect在Android(Nexus 4和Android 5.1)上测试它,我刚刚收到一个错误,上面写着“无法读取未定义的'isAvailable'属性”。不用说,警报不会弹出
所有从控制器内以这种方式调用的插件都会发生这种情况
我做错了什么?在启动cordova device ready之前,您似乎正在调用插件。在我的angularjs应用程序中,我完成了以下工作。 1.从html中删除ng应用程序,并通过脚本手动引导 2.将cordova.js文件添加到依赖项中。(作为最后一个依赖项。在ng cordova js之后) 3.将cordova.js与index.html放在同一文件夹中。(没有解释原因。从任何其他位置,只是没有添加。可能是与cordova有关的特定内容。) 4.将以下脚本添加到index.html
<script type="text/javascript" language="text/javascript">
$(document).ready(function() {
document.addEventListener("deviceready", onDeviceReady, false);
});
onDeviceReady = function() {
alert("hello!");
angular.element(document).ready(function() {
angular.bootstrap(document, ["main"]);
});
};
</script>
$(文档).ready(函数(){
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
});
onDeviceReady=函数(){
警惕(“你好!”);
元素(文档).ready(函数(){
引导(文档,[“main”]);
});
};
这里的“main”是我的主要angularjs模块。这可确保只有在cordova触发设备就绪事件且所有cordova相关功能可用后,才加载应用程序。我没有任何代码。可能是应用程序可以放置的离子引导部分,而不是angular.bootstrap
我的假设是:您已经通过命令将插件添加到cordova项目中
cordova plugin add <plugin-location>
cordova插件添加
index.html如果你可以在app.js中使用ngCrdova插件,那么ng cordova include是可以的,我认为ng cordova在角度依赖性中的注入是不好的。试试这个:
- app.js
- controllers.js
angular.module('startapp', ['ionic','ngCordova','startapp.controllers'])
controllers.js
angular.module('startapp.controllers', [])
.controller('AppCtrl', function($scope,$cordovaEmailComposer) {
var email = {
to: 'max@mustermann.de',
cc: 'erika@mustermann.de',
bcc: ['john@doe.com', 'jane@doe.com'],
attachments: [
'file://img/logo.png',
'res://icon.png',
'base64:icon.png//iVBORw0KGgoAAAANSUhEUg...',
'file://README.pdf'
],
subject: 'Cordova Icons',
body: 'How are you? Nice greetings from Leipzig',
isHtml: true
};
$cordovaEmailComposer.open(email).then(null, function () {
// user cancelled email
});
})
仅在app.js应用程序定义中包含ngCordova。是的,我已经在命令行中添加了插件,并检查了它们是否已安装。我实际上正在做一个设备准备,只是一个离子型的,而不是(文档)。准备好了。这是根据ngCordova的文档。cordova.js文件呢?你加进去了吗?其中一些将添加deviceready事件。你必须检查它是否被激活。是的,它被添加了。如果没有它,任何一个都不会出现,而且几乎可以正常工作。您可以尝试将其包装到document.addEventListener('deviceready',function(){});我已经在ready函数中添加了一个警报,当你进入页面时它会触发,但插件不起作用:(可能这会有帮助。我可以尝试一下,但它似乎没有必要,因为插件不需要在应用程序启动时就准备好。