我刚刚开始熟悉AngularJS,但是我想构建一个Web视图,该视图具有一个视图,当服务器端数据库中发生某些更改时,该视图将为用户实时自动更新(不刷新)。
AngularJS可以自动为我处理(大部分)吗?如果是这样,起作用的基本机制是什么?
例如,您是否以某种方式设置AngularJS来定期轮询数据库以查找“模型”更改?还是使用某种类似Comet的机制来通知AngularJS客户端代码模型已更改?
在我的应用程序中,挑战在于其他(非Web)服务器端软件有时会更新数据库。但是,这个问题同样适用于纯Web应用程序,在该Web应用程序中,您可能有多个客户端通过AngularJS Web客户端更改数据库,并且每个客户端都需要在其中一个更改数据库(模型)时进行更新。
您有几种选择…
您可以使用$timeout和进行每X毫秒的轮询$http,或者如果您使用的数据已连接到REST服务,则可以使用$resource代替$http。
$timeout
$http
$resource
您可以创建一个使用某些Websocket实现并用于scope.$apply处理套接字推送的更改的服务。这是使用socket.io(一个node.js websocket库)的示例:
scope.$apply
myApp.factory('Socket', function($rootScope) { var socket = io.connect('http://localhost:3000'); //Override socket.on to $apply the changes to angular return { on: function(eventName, fn) { socket.on(eventName, function(data) { $rootScope.$apply(function() { fn(data); }); }); }, emit: socket.emit }; }) function MyCtrl($scope, Socket) { Socket.on('content:changed', function(data) { $scope.data = data; }); $scope.submitContent = function() { socket.emit('content:changed', $scope.data); }; }
编辑 :对于#3,我一直在使用Firebase来做到这一点。