簡體   English   中英

Cordova 'deviceready' 事件不會從 angular .run 塊內觸發

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM