2013-03-14 120 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

相关问题