[英]Cordova 'deviceready' event not firing from within angular .run block
我在讓“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 從未設置。 現在,我知道在 Angular 引導時,PhoneGap 可能已經觸發了“deviceready”,但根據 PhoneGap 文檔,這應該無關緊要。
deviceready 事件的行為與其他事件有些不同。 在 deviceready 事件觸發后注冊的任何事件處理程序都會立即調用其回調函數。
“deviceready”的行為有什么變化嗎?
我目前使用 Cordova 3.3.0 和 Angular 1.2.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 事件,如果不是,那么我們就忽略該事件並加載我們的應用程序。
無論哪種方式,您也可以使用DOMContentLoaded
事件處理程序以 javascript 方式處理它
document.addEventListener("DOMContentLoaded", function() {
//alert("Calling DOMContentLoaded");
document.addEventListener('deviceready', function(){
//alert("Calling onDeviceReady()");
initializeYourApp();
}, false);
});
我有過這個問題。 對我來說,問題是在標題中有 for cordova.js 。
如果您從cordova cli 生成一個示例項目,它們在主體中具有腳本標記。
一旦我把它放在正文中,就像示例項目那樣,在 app-root 旁邊,我開始獲取 deviceready 事件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.