在CordularJS中放置Cordova / Phonegap活动的最佳场所

时间:2014-01-07 15:29:46

标签: javascript angularjs mobile cordova

我有一个AngularJS Cordova应用程序,目前一切都很顺利。我的下一步是将Cordova插件添加到应用程序(如Cordova Connect插件),以检查网络连接是否已打开并侦听网络事件。

计划是收听这些网络事件并询问Connect插件是否设备已连接到互联网,否则我将重定向到错误页面。

我正在努力在我的AngularJS应用程序中找到一个位置,在应用程序启动时注册这些事件。

它们应该在主运行块,配置块还是某种工厂/服务/提供商内?

你们在哪里放置这些外部AngularJS设备事件?

FX。

document.addEventListener("online", yourCallbackFunction, false);

3 个答案:

答案 0 :(得分:2)

我有myModule.run我的app.js并且效果很好,我实际上还有其他的cordova活动。

enter image description here

MyModule.run(function ($rootScope, $http, dataService, $window, $q, $location, localize) {

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {

    //Initialize anything you need to. aka: Google analytics.

    //Set other evens you need to listen to.
    document.addEventListener("online", onOnline, false);
    document.addEventListener("offline", onOffline, false);
 }
}

希望这有帮助!

答案 1 :(得分:0)

嗯这个工作正常,但是我做的是基于Brian ford的angular-phonegap-ready component,是在我的组件中注入这个组件来调用phonegap的api,所以不要把所有内容都放在app.js中。 Document.addEventListener( “deviceready”,功能);每当我们在创建app app.module('apptitle',['Phonegap_component_goes_here'])时注入bt.phonegap.ready,就会调用一次。然后我添加我创建的组件,它会将任何函数添加到队列中。每当我想使用这些函数时,我会注入我的组件并调用其中的任何函数。查看我的回购以更好地了解我所做的事情:https://github.com/malikov/simple-angular-phonegap-app以及此处组件的示例:https://github.com/malikov/angular-phonegap-storage,希望这有助于

答案 2 :(得分:0)

你在这里找到一个非常有用的教程: http://mobileangularui.com/blog/your-first-phonegap-app-with-mobile-angular-ui/

如果上述链接发生变化,请参阅以下简短摘要:

// Create a service
angular.module('WeatherApp.services.Cordova', [])

.factory('deviceReady', function(){
  return function(done) {
    if (typeof window.cordova === 'object') {
      document.addEventListener('deviceready', function () {
        done();
      }, false);
    } else {
      done();
    }
  };
});

在一项服务中,他们使用deviceready服务:

.factory('getCurrentPosition', function(deviceReady, $document, $window, $rootScope){
  return function(done) {
    deviceReady(function(){
      navigator.geolocation.getCurrentPosition(function(position){
        $rootScope.$apply(function(){
          done(position);
        });
      }, function(error){
        $rootScope.$apply(function(){
          throw new Error('Unable to retreive position');
        });
      });
    });
  };
});