我甚至不知道如何直接解释这个,但我会试试.
介绍
我正在使用angularjs构建一个Phonegap应用程序,我正在尝试缝合WebSocket消息以更新我的UI.我曾经有过定期与服务器通信的服务,并相应地更改了他们的数据,并且它运行良好.一个例子:
Service1.js:
var applyUpdate = function (
angular.extend(instance, data);
if (!$rootScope.$$phase) $rootScope.$apply();
};
this.update = function () {
DataProvider.get('getThermostatSettings', {}, applyUpdate, function(){}, true);
}
所以基本上我只是每隔5秒调用一次“更新”功能,从服务器接收数据并更新该服务.然后控制器只需访问此服务,一切正常.
问题
现在的问题是,我缝了一个用java编写的WebSocket接口,它为我处理所有的websocket实现.我从https://github.com/ziadloo/PhoneGap-Java-WebSocket开始.它基本上注册了一个可以从Javascript访问的Javascript接口来与java通信.
每次我现在都有变化,我只是通过WebSocket从服务器推出一个字符串,说它应该更新,然后我在我的javascript中调用服务中的“更新”功能,而不是定期查询数据,这只是笨.
WebSockets运行良好.我可以看到消息来了,我调用更新,它从服务器正确地获取所有内容,“更新”函数调用然后调用具有正确值等的“applyUpdate”,甚至调用“$rootScope.$apply”.
但角度服务内的所有更新数据都不可见!似乎所有这些变化都在不同的线程中运行!?!?.我知道javascript是单线程的,但它似乎就是这样.
让我以更好的方式提出这个问题:我的印象是,只要WebView调用javascript回调函数,我就会运行一个不同的javascript“线程”,并且无法访问它之外的任何内容
更多关于它
我写了一个函数,只需每5秒输出一个数字. websocket更新此号码.我的输出如下:
N: 1
N: 1
然后在WebSocket用新的Number(2)推送数据后,我得到两个打印:
N: 1
N: 2
N: 1
N: 2
N: 1
N: 2
有人对此有任何指示吗?有人试过做类似的事吗?我不是专业的角色,但是只要我从java界面获得回调,就会发现一切都搞砸了.
我已经看过了:Angularjs model changes after websocket data push from server,我的代码看起来非常相似.我认为唯一的问题是来自Java的回调.
谢谢
更新:这是AngularJS的一个问题.如果我在窗口全局变量中设置此变量,则所有内容都会正常分配.是否有可能Angular以某种方式创建两个不同的$范围?
更新[2]:更清楚一点:在浏览器中,一切都按预期工作.只有当我在模拟器中运行它时才会搞砸这个东西.
解决方法:
Angular.js完全有可能制作两个$scope.只需看看this screencast中的调试.
它可能有助于show all the $scopes on the page.
您还应该知道websockets on mobile aren’t the best idea.基于该演讲(由具有websockets专业知识的Nodejitsu员工),崩溃和失败似乎非常可能.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。