科尔多瓦'deviceready'事件不会从角.RUN块内发射 [英] Cordova 'deviceready' event not firing from within angular .run block

查看:197
本文介绍了科尔多瓦'deviceready'事件不会从角.RUN块内发射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在得到deviceready从AngularJS内登记的问题。我敢肯定这是之前的工作,所以我不知道是什么改变了。

I'm having issues getting 'deviceready' to register from inside of AngularJS. I'm certain this was working before, so I'm not sure what's changed.

如果我称之为deviceready从全球的addEventListener,它的工作原理,就像这样:

If I call 'deviceready' from a global addEventListener, it works, like so:

document.addEventListener('deviceready', function(){
   localStorage.deviceReadyGlobal = true;
});

deviceReadyGlobal = TRUE设置。但是,如果我尝试从内部角度重视这一点,不闪光,像这样:

deviceReadyGlobal=true is set. However, if I try to attach this from within Angular, it never fires, like so:

app.run(function(){
    document.addEventListener('deviceready', function(){
        localStorage.deviceReadyAngular = true;
    });
});

deviceReadyAngular从未设置。现在,我明白的PhoneGap可能已经解雇了deviceready',而角是引导,但根据PhoneGap的文档,这不应该的问题。

deviceReadyAngular is never set. Now, I understand that PhoneGap probably already fired 'deviceready' while Angular was bootstrapping, but according to the PhoneGap docs, that shouldn't matter.

该deviceready事件从别人的行为有所不同。任何
  在deviceready事件触发后注册的事件处理程序有其
  立即打电话回调函数。

The deviceready event behaves somewhat differently from others. Any event handler registered after the deviceready event fires has its callback function called immediately.

在行为做了一些改变deviceready?

Did something change in the behavior of 'deviceready'?

我使用的科尔多瓦3.3.0和1.2.5角目前。

I'm using Cordova 3.3.0 and Angular 1.2.5 currently.

推荐答案

这是我怎么做我的应用程序在里面;

This is how I do it inside my app;

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

这样,如果我们是一个设备里面environement然后我们听deviceready情况下,如果不是,那么我们就忽略该事件并加载应用程序。

This way if we are inside a device environement then we listen to deviceready event, if not, then we just ignore that event and load our app.

这篇关于科尔多瓦'deviceready'事件不会从角.RUN块内发射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆