2013-03-14 119 views
57

AngularJS文檔中有些東西我似乎找不到,或者我只是想念。AngularJS在服務器和客戶端之間自動同步數據

我在後端創建了一個帶有NodeJS和Express的Web應用程序,並且試圖瞭解它如何在前端與Angular進行交互。特別是,我將有一個JSON API用於Angular從中獲取信息。我希望前端始終保持最新狀態。

我的問題是:

  • 數據是否雙向綁定功能意味着角($資源或 $ HTTP)自動從服務器每ň 秒獲取數據?
  • 它自然使用長輪詢,短輪詢或websockets?
  • 您是否需要JQuery來實現服務器端與客戶端同步,或者是否可以使用Angular完成所有任務 ?
  • 您是否需要添加額外的代碼才能使此行爲發生 ?我需要使用$超時嗎?

我似乎發現的每個例子都涉及客戶端讀取數據一次。沒有將數據與服務器同步。

+3

Angular不管理客戶端/服務器synchornization。如果你想定期輪詢後端,你需要自己寫。爲了方便起見,你可以使用$ timeout(所以更新發生在摘要循環中),但是你必須在你自己的代碼中進行範圍更新。 – Jollymorphic 2013-03-14 18:13:24

回答

81

AngularJS中的雙向綁定是指數據模型($ scope)和您的視圖(指令)。例如,如果數據在您的模型中發生變化,視圖將自動更新。同樣,如果用戶修改視圖中的數據,您的模型將自動更新。

通過$ http服務模塊與Web服務進行交互。所以從您的RESTful API獲取數據,你會做這樣的事情:

$http.get('/someUrl').success(successCallback); 

完整文檔的$ HTTP是在AngularJS site。我想你會發現它與jQuery的$ .ajax方法非常相似。您可以使用angular的$ timeout服務(基本上是setTimeout的包裝)輕鬆設置$ http.get()進行短輪詢。

對於AngularJS客戶端和服務器API之間的實時更新,您可能需要查看Socket.io。它使用node.js在瀏覽器和服務器之間創建一個活動套接字連接,併爲舊版瀏覽器提供回退機制(flash,long-polling)。有在GitHub上一個樣板項目,演示瞭如何建立AngularJS與Socket.io: https://github.com/btford/angular-socket-io-seed

重述一遍:

數據是否雙向綁定功能意味着角($資源或 $ http)每n秒自動從服務器獲取數據?

不,雙向綁定是在Angular模型和視圖之間。

它自然使用長輪詢,短輪詢還是websocket?

Angular在默認情況下不包括這些中的任何一個。你必須自己設置它們。

您是否需要JQuery來實現服務器 - 客戶端同步,還是一切都可以通過Angular完成?

$ HTTP是,在廣義上,jQuery的的角相當於$就

你必須添加額外的代碼,以使這種行爲發生的呢?我需要使用$超時嗎?

使用$ timeout進行短輪詢,或者爲長輪詢和/或websocket使用自己的解決方案(請參閱angular-socket-io-seed項目)。

+2

非常有幫助 - 可能值得一提的是,本例中的「模型」是客戶端。這對我來說並不明顯。你知道Angular是否計劃使用socket.io或其他方式與庫中的默認API進行交談?我很驚訝這部分沒有在他們的文檔中提到。謝謝! – 2013-09-22 01:57:59

+0

也許你可以在這個項目中找到更多關於如何實現這個概念的見解。儘管它基於KO,但您可以瞭解:https://github.com/imrefazekas/knockout.sync.js – Qorbani 2013-09-28 15:32:27

+0

您應該查看Omnibinder - 目前是一個原型,但正在尋求處理服務器 - 客戶端模型同步。 – Bringer128 2014-04-24 02:11:14

相關問題