我正在寻找一些最佳实践,如何将集合与 REST 同步并使用 Web 套接字获取实时更新。如果我有收藏items
...
{id: 1, title: "First todo", completed: false}
{id: 2, title: "Second todo", completed: true}
{id: 3, title: "Third todo", completed: false}
我正在为 TodoItems 定义一个 REST 资源:
app.factory('TodoItems', function($resource) {
return $resource( '/todoitems/:id', { id: '@id' },
{create: { method: 'POST' },
update: { method: 'PUT' } }
});
其余资源应用于fetch
整个列表,但update
只能用于单个项目。
我可能有某种webSocket.listenForChanges(item.id, cb)
.
拥有这两种获取、操作数据和获取实时更新的方法,我该如何实际使用它?
...我可以$scope.$watchCollection
在任何更改时执行并获取更新,但是每次我手动更改集合时都会运行回调,这不仅是由于用户更新,因为用户更新需要运行TodoItems.update(item)
,而且 Web 套接字更新不能触发我的 REST API。
webSocket.listenForChanges(item.id, function(newItem) { $scope.item = newItem; });
// This triggers $watchCollection - NOT GOOD, because $watchCollection
// could trigger and call upon REST
AngularFire 以某种方式做到了http://www.youtube.com/watch?v=C7ZI7z7qnHU#t=30m28s但我怀疑他们通过批量同步整个阵列来做到这一点。
$watch
对每个项目的控制器中的单个项目进行一些修改,具有以下 JADE 模板
ul
li(ng-repeat='todo in todos',ng-controller='TodoItemController')
然而问题是一样的,$watch
无法区分服务器更新和用户更新。
我唯一的希望是仅从范围控件中调用我的 REST API,updateItem(item)
removeItem(item)
还是有一些更聪明的方法可以通过 REST/websocket 自动同步集合?