我甚至不知道如何直接解釋這一點,但我會嘗試。Angularjs Phonegap Android使用Websockets
介紹
我建立一個應用程序的PhoneGap與angularjs,我試圖縫合起來的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秒,從服務器接收數據並更新該服務。然後控制器就可以簡單地訪問這個服務,並且一切正常。
問題
現在的問題是,我縫合了的WebSocket接口用Java編寫的,它處理所有對我的WebSocket實現。我把它從:https://github.com/ziadloo/PhoneGap-Java-WebSocket。它基本上註冊了一個Javascript接口,可以通過Javascript與java通信。
每當我現在有一個變化,我只是從服務器通過WebSocket推送一個字符串,說它應該更新,然後我從我的JavaScript中的服務調用「更新」功能,而不是定期查詢數據,這只是愚蠢的。
WebSockets運行良好。我可以看到消息來了,我調用更新,它從服務器正確地獲取所有東西,「更新」函數調用,然後使用正確的值等「applyUpdate」,甚至「$ rootScope。$ apply」被調用。
但角度服務中的所有更新數據都不可見!似乎所有這些變化都在不同的線程中運行!。我知道JavaScript是單線程的,但它似乎是如此。
讓我把這個以更好的方式:我有儘快的WebView調用JavaScript回調函數的印象,我有一個不同的JavaScript「線程」運行,並沒有什麼外界可以訪問
更多關於它
我寫的只是輸出一些每5秒功能。 websocket更新這個數字。而我的輸出如下:WebSocket的一個新的號碼(2)推動數據
再經過N: 1
N: 1
,我得到兩個打印:
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]:只是要更清楚一點:在瀏覽器中,一切都按預期工作。只有當我在模擬器中運行它時,這件事情會變得混亂。
你是否從同一個域名服務js應用程序和java api? – 2013-03-22 17:14:56
JavaScript使一些跨域請求,但他們都工作,包括WebSocket。請看我的更新。看起來,角正在創造兩個範圍。如果我在全局命名空間中設置了這個變量,那麼一切都可以實現 – 2013-03-22 17:17:09
好吧,那麼你在哪裏定義'applyUpdate'中使用的'instance'和'data'。數據顯然是從websocket返回的,什麼是「instanse」? – 2013-03-22 19:02:19