Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 使用ngCordova插件而不在app.js中调用它们?_Angularjs_Cordova_Plugins_Ionic Framework_Ngcordova - Fatal编程技术网

Angularjs 使用ngCordova插件而不在app.js中调用它们?

Angularjs 使用ngCordova插件而不在app.js中调用它们?,angularjs,cordova,plugins,ionic-framework,ngcordova,Angularjs,Cordova,Plugins,Ionic Framework,Ngcordova,多亏了爱奥尼亚,我的应用看起来不错。所有的核心信息都在那里,我只是添加了一些装饰——电子邮件、共享、媒体(其中一个功能是节拍器)等等 我无法让任何插件工作 我已经成功地使用了以前的Ionic应用程序,但是插件都是从内部调用的 .run(function($ionicPlatform) { $ionicPlatform.ready(function() { } } 事实上,Statusbar插件似乎工作正常,它是从内部调用的 我正在使用侧菜单启动器,附带内置选项卡 我想,我的问题是我

多亏了爱奥尼亚,我的应用看起来不错。所有的核心信息都在那里,我只是添加了一些装饰——电子邮件、共享、媒体(其中一个功能是节拍器)等等

我无法让任何插件工作

我已经成功地使用了以前的Ionic应用程序,但是插件都是从内部调用的

.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
将ng cordova添加到项目涉及调整模块定义文件,如:

app.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函数中添加了一个警报,当你进入页面时它会触发,但插件不起作用:(可能这会有帮助。我可以尝试一下,但它似乎没有必要,因为插件不需要在应用程序启动时就准备好。