我在让'deviceready'从AngularJS内部注册时遇到问题。我确定之前有效,所以我不确定发生了什么变化。
如果我从全局addEventListener调用'deviceready',它就会起作用,如下所示:
document.addEventListener('deviceready', function(){
localStorage.deviceReadyGlobal = true;
});
设置了deviceReadyGlobal = true。但是,如果我尝试在Angular中附加它,它就永远不会触发,如下所示:
app.run(function(){
document.addEventListener('deviceready', function(){
localStorage.deviceReadyAngular = true;
});
});
从未设置deviceReadyAngular。现在,我知道PhoneGap可能已经解雇了'deviceready'而Angular正在引导,但根据PhoneGap文档,这应该没关系。
deviceready事件的行为与其他事件略有不同。任何 在deviceready事件触发后注册的事件处理程序 立即调用回调函数。
'deviceready'的行为有什么变化吗?
我目前正在使用Cordova 3.3.0和Angular 1.2.5。
答案 0 :(得分:5)
这就是我在我的应用程序中执行的操作;
// Create an application module with dependencies
var app = angular.module('myApp', []);
function loadTheApp() {
// Hide splash screen if any
if (navigator && navigator.splashscreen) {
navigator.splashscreen.hide();
}
// Initiate FastClick
FastClick.attach(document.body);
// Boot AngularJS
try {
angular.bootstrap(document, ['myApp']);
} catch (e) {
console.log('errrrrrrrrrrrrrr! ' + e);
}
}
// Listen to device ready
angular.element(document).ready(function() {
if (window.cordova) {
document.addEventListener('deviceready', loadTheApp, false);
} else {
loadTheApp();
}
});
这样,如果我们在设备环境中,那么我们会监听deviceready事件,如果没有,那么我们只是忽略该事件并加载我们的应用程序。
答案 1 :(得分:0)
无论哪种方式,您都可以使用javascript方式的DOMContentLoaded
事件处理程序处理它
document.addEventListener("DOMContentLoaded", function() {
//alert("Calling DOMContentLoaded");
document.addEventListener('deviceready', function(){
//alert("Calling onDeviceReady()");
initializeYourApp();
}, false);
});
答案 2 :(得分:0)
我遇到了这个问题。对我来说,问题在于标头中包含for cordova.js。
如果您从cordova cli生成示例项目,则它们在主体内部具有script标签。
一旦将其放入体内,就像示例项目中那样,在应用程序根目录旁边,我就开始获取deviceready事件