1)我有多页PhoneGap应用程序。他们每个人都可以拨打PhoneGap API。
我应该在每个页面上放置deviceready
监听器,还是仅仅放在第一页上就足够了?
2)我使用<ng-view>
的AngularJS路由来启用单页面应用程序。主页面为index.html
,所有其他页面都嵌入在index.html内的<ng-view>
内。每个页面都可以调用PhoneGap API。是否只将deviceready listener放在index.html上就足够了?
答案 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
});
});