Javascript 在多页PhoneGap应用程序上,我应该将DeviceRady放在哪里?

Javascript 在多页PhoneGap应用程序上,我应该将DeviceRady放在哪里?,javascript,android,ios,angularjs,cordova,Javascript,Android,Ios,Angularjs,Cordova,1) 我有多页PhoneGap应用程序。它们中的每一个都可以调用PhoneGap API。 我应该在每一页上放置deviceradylistener,还是只在第一页上放置就足够了 2) 我使用带有的AngularJS路由来启用单页应用程序。主页是index.html,所有其他页面都嵌入在index.html内部的。每个页面都可以调用PhoneGap API。仅将deviceready listener放在index.html上就足够了吗?只需在index.html中添加设备就绪,就像在angua

1) 我有多页PhoneGap应用程序。它们中的每一个都可以调用PhoneGap API。 我应该在每一页上放置
devicerady
listener,还是只在第一页上放置就足够了


2) 我使用带有
的AngularJS路由来启用单页应用程序。主页是
index.html
,所有其他页面都嵌入在index.html内部的
。每个页面都可以调用PhoneGap API。仅将deviceready listener放在index.html上就足够了吗?

只需在index.html中添加设备就绪,就像在angualrjs中一样,所有其他页面都将通过ng视图包含在index.html中。DeviceRady这样应该可以正常工作

另外,在调用DeviceRady后引导angularjs,因为如果您要脱机使用应用程序,它可能会导致问题


希望这有帮助

我通过将设备就绪放在index.html中,并将引导angularjs放在deviceready回调中使其工作。但是,它没有经过优化,因为它会在与PhoneGap本机进程建立连接之前阻止UI呈现

描述了更好的方法。基本上,他使用promise模式,因此只有Phonegap API调用等待deviceready事件。UI呈现和angularjs绑定甚至可以在调用deviceready之前完成。这样,用户体验会更好

angular.module('fsCordova', [])
.service('CordovaService', ['$document', '$q',
  function($document, $q) {

    var d = $q.defer(),
        resolved = false;

    var self = this;
    this.ready = d.promise;

    document.addEventListener('deviceready', function() {
      resolved = true;
      d.resolve(window.cordova);
    });

    // Check to make sure we didn't miss the 
    // event (just in case)
    setTimeout(function() {
      if (!resolved) {
        if (window.cordova) d.resolve(window.cordova);
      }
    }, 3000);
}]);

angular.module('myApp', ['fsCordova'])
.controller('MyController', 
  function($scope, CordovaService) {
    CordovaService.ready.then(function() {
      // Cordova is ready
    });
});