AngularJS 在服务器和客户端之间自动同步数据

Posted

技术标签:

【中文标题】AngularJS 在服务器和客户端之间自动同步数据【英文标题】:AngularJS Automatically Syncing Data between Server and Client 【发布时间】:2013-03-03 06:01:31 【问题描述】:

在 AngularJS 文档中有一些我似乎无法找到的东西,或者我只是丢失了。

我正在使用 NodeJS 和 Express 在后端创建一个 Web 应用程序,并且我试图了解它如何在前端与 Angular 进行交互。特别是,我将有一个用于 Angular 的 JSON API 来从中获取信息。我希望前端始终是最新的。

我的问题是:

双向数据绑定功能是否意味着 Angular($resource 或 $http) 每隔 n 自动从服务器获取数据 秒? 它自然会使用长轮询、短轮询或 websocket 吗? 你需要JQuery来实现服务端同步还是什么都能搞定 与角? 您是否必须添加额外的代码才能实现此行为 发生?我需要使用 $timeout 吗?

我似乎找到的每个示例都涉及客户端获取数据一次。不与服务器同步数据。

【问题讨论】:

Angular 不管理客户端/服务器同步。如果您想定期轮询后端,则需要自己编写。为方便起见,您可以使用 $timeout(因此更新发生在摘要循环内),但您必须在自己的代码中进行范围更新。 【参考方案1】:

AngularJS 中的双向绑定指的是数据模型($scope)和你的视图(指令)。例如,如果模型中的数据发生变化,视图将自动更新。同样,如果用户修改视图中的数据,您的模型将自动更新。

与 Web 服务的交互是通过 $http 服务模块进行的。因此,要从您的 RESTful API 中获取数据,您可以执行以下操作:

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

$http 的完整文档位于 AngularJS site。我想你会发现它与 jQuery 的 $.ajax 方法非常相似。您可以使用 Angular 的 $timeout 服务(基本上是 setTimeout 的包装器)轻松设置 $http.get() 进行短轮询。

对于 AngularJS 客户端和服务器 API 之间的实时更新,您可能需要查看 Socket.io。它使用 node.js 在浏览器和服务器之间创建实时套接字连接,并为旧版浏览器提供后备机制(闪存、长轮询)。 GitHub 上有一个样板项目,演示了如何使用 Socket.io 设置 AngularJS: https://github.com/btford/angular-socket-io-seed

回顾一下:

双向数据绑定功能是否意味着 Angular($resource 或 $http) 每隔 n 秒自动从服务器获取数据?

不,Angular 模型和视图之间存在双向绑定。

它自然会使用长轮询、短轮询或 websockets 吗?

Angular 默认不包含任何这些。您必须自己设置它们。

您是否需要 JQuery 来实现服务器-客户端同步,或者一切都可以使用 Angular 完成?

$http 在广义上是 Angular 的 jQuery 的 $.ajax 等价物

您是否必须添加额外的代码才能使这种行为发生?我需要使用 $timeout 吗?

使用 $timeout 进行短轮询,或为长轮询和/或 websockets 推出您自己的解决方案(请参阅angular-socket-io-seed 项目)。

【讨论】:

非常有帮助 - 值得一提的是,在这种情况下,“模型”是客户端。这对我来说并不明显。你知道 Angular 是否计划将 socket.io 或其他与 API 对话的方式作为库中的默认设置吗?我很惊讶他们的文档中没有提到这部分。谢谢! 也许你可以找到更多关于如何在这个项目中实现这个概念的见解。虽然,它是基于 KO,但你可以得到想法:github.com/imrefazekas/knockout.sync.js 您应该研究 Omnibinder - 目前是一个原型,但正在寻求处理服务器-客户端模型同步。

以上是关于AngularJS 在服务器和客户端之间自动同步数据的主要内容,如果未能解决你的问题,请参考以下文章

在服务器和多个客户端之间同步数据库更改

如何在 AngularJS 客户端和 Node.js 服务器之间重用代码 [关闭]

在前端和后端之间同步日期格式

在angularjs中同步范围[重复]

windowlinux系统与linux服务器之间使用svn同步及自动部署代码的方法

远程服务器上的 CoreData 在不同客户端(应用程序)之间同步