AngularJS:使用ng-repeat处理套接字数据的最佳方法
我对Socket.IO的实时数据很陌生。 我正在试图找出在AngularJS ng-repeat中处理来自Socket.IO的数据的最佳方法是什么?
现在我有后端发送整个数据结构每次有更新。
但是这会导致ng-repeat
刷新以显示新的数据(如果我只对客户端的数据进行了任何修改,那么在下一次从后端发送数据时,它们将被删除)。 有一个更好的方法吗?
我是否应该过滤掉后端需要更新的唯一数据,然后将其发送到前端,而不是再次提交整个数据结构? (但是,那么我将如何在只有更新数据的ng-repeat
应用这个…)
我尝试在前端使用UnderscoreJS扩展方法,但它似乎导致ng-repeat
的数据sorting问题(orderBy和筛选两个中断)。
我的具体使用案例是处理体育比分(数组中的几个比赛项目),我不断得到数据的更新,无论是比赛时间变化还是比赛得分。 更新几乎每秒都在发生。 我正在利用这个特定的API,并抓取一个特定的刷新variables的所有数据,然后通过套接字发送到前端。 不是真正使用套接字的理想情况,但它是迄今为止我发现的与API进行交互的唯一方法。
我认为最好是只发送给客户新的事件,而不是每次都发送给整个列表。 您可以将这些事件添加到数组,并让ng-repeat
渲染它们。 下面是一个使用ngSocketIO的例子,它是我为Angular创build的一个简单的SocketIO模块(语法与我们已经使用的语法不会有太大的区别):
app.controller('MyCtrl', function($scope, socket) { $scope.events = []; socket.on('someEvent', function(data) { $scope.events.push(data); } }
标记可能是这样的:
<ul> <li ng-repeat="event in events">{{ event.name }}</li> </ul>
现在,您可以更改events
数组的任何对象,并且在下一个事件到达时不会被删除。 如果同一个事件可以再次发送(也许有新的数据),那么你可以用“散列”replace数组:
app.controller('MyCtrl', function($scope, socket) { $scope.events = {}; socket.on('someEvent', function(data) { $scope.events[data.id] = data; } }
ng-repeat
expression式需要稍微改变才能迭代一个散列:
<li ng-repeat="(id, data) in events">{{id}}: {{data.name}}</li>
在这种情况下,如果同一事件再次到达,则对事件的任何本地更改都将丢失。 如果要部分更新if的本地副本,则需要手动执行此操作,也许可以通过保存不希望丢失的部分,并在使用服务器中的新数据更新本地事件后进行恢复。
- 将文件从AngularJS上传到ExpressJS 4 API
- 如何将数据从AngularJS前端传递到Nodejs后端?
- 无法在Angular工厂中获得$ q保证正常工作
- 如何使用angular postgres和node在configuration文件中显示数据库中的用户信息? 我的代码不起作用
- 数字types错误与mongoose模型?
- Internet Explorer11使用量angular器工作速度太慢
- AngularJS – 如何使用Http Web服务器呈现视图时禁用目录浏览/列表
- 这些Node.js和JavaScript框架是什么?它们是做什么的?
- Angularjs在Express 4.0后端API上进行路由