【发布时间】:2013-12-19 21:39:23
【问题描述】:
我在从 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 可能已经在 Angular 引导时触发了“deviceready”,但根据 PhoneGap 文档,这应该没关系。
deviceready 事件的行为与其他事件有些不同。任何 在 deviceready 事件触发后注册的事件处理程序有它的 回调函数立即调用。
'deviceready' 的行为是否发生了变化?
我目前使用的是 Cordova 3.3.0 和 Angular 1.2.5。
【问题讨论】:
-
不知道为什么它不工作,但我总是在 deviceReady 处理程序中引导角度。
-
谢谢。我知道很多 PhoneGap/Angular 的人都推荐这种方法。我试图避免它,因为我们的应用引导程序中没有任何阻塞的 PhoneGap 依赖项。我们也不会/总是/在 PhoneGap 中运行应用程序。
-
我打赌你错过了
deviceready事件,因为附加你的处理程序太晚了。您是否尝试过在角度开始之前使用全局捕获它,然后仅在您尚未看到该事件时才将事件添加到您的run块中? -
@JeffHubbard cordova.js 劫持 document.addEventListener 并对其进行修改,以便在它已经触发一次后尝试附加“deviceready”时立即执行回调函数。因此,它应该正确处理这种情况。我想我有一个部分答案 - 我稍后会写出来。谢谢!
-
@sandstrom 不完全是。我似乎有两个问题。如果我使用 on(),那么 PhoneGap 和 Angular 似乎与他们的事件处理程序劫持发生冲突。如果我使用 addEventListener(),看起来 Angular 在加载 cordova.js 之前正在执行。无论哪种方式,它都是善变的,我最终将该代码移出 Angular。我现在只是在它自己的全局命名空间中运行它。
标签: javascript angularjs cordova