我应该在多功能PhoneGap应用程序中将deviceready放在哪里?

时间:2014-05-28 14:04:57

标签: javascript android ios angularjs cordova

1)我有多页PhoneGap应用程序。他们每个人都可以拨打PhoneGap API。 我应该在每个页面上放置deviceready监听器,还是仅仅放在第一页上就足够了?

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

2 个答案:

答案 0 :(得分:2)

只需在index.html中添加设备就像在angualrjs中一样,所有其他页面都将通过ng-view包含在index.html中。 deviceready应该以这种方式工作。

在调用设备之后再引导你的angularjs,因为如果你要离线使用你的应用程序,它可能会导致问题。

希望这会有所帮助。

答案 1 :(得分:0)

我通过将设备准备好放在index.html中,并在deviceready回调中引导angularjs来实现它。但是它没有进行优化,因为它会阻止UI呈现,直到建立与PhoneGap本机进程的连接为止。

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

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
    });
});