处理从 $resource 返回的集合
Manipulate collection returned from $resource
我有一个名为 Message
的服务,可以从 API 发送 returns 条消息。它看起来像这样:
app.factory('Message', function($resource) {
return $resource('http://localhost:3000/messages/:id');
});
它工作正常,我在我的控制器中使用它来将消息分配到我的范围:
app.controller('MessagesCtrl', function($scope, Message) {
$scope.messages = Message.query();
}
当我在浏览器的控制台中登录 $scope.messages
时,如下所示:
[$promise: Promise, $resolved: false]
0: Resource
1: Resource
2: Resource
3: Resource
$promise: Promise
$resolved: true
length: 4
__proto__: Array[0]
到目前为止,一切顺利 - 四个消息。我希望能够专门操作此集合中的元素,例如删除、更新和添加元素。
基于this answer,这是我尝试删除具有特定 id 的邮件的方法:
$scope.messages = $scope.messages.filter(function(obj) {
return (object.id != 6);
});
但这会将 $scope.messages
变成一个空集合。我如何通过 id 从这个资源集合中删除特定元素?另外,我如何用另一个对象替换此集合中的现有元素?
$resource 自动扩展 promise(作为一种方便的方法)并将响应附加到返回的对象本身,这在将数据绑定到视图时非常方便(因为在 promise 解析之后运行的摘要循环将更新DOM with bound object with resolved data ), 但在直接操作数据时尤其如此,尤其是当您在数据解析之前尝试访问它时。因此,如果您想操作数据,则需要等待承诺得到解决。
即:-
//chain through the promise.
Message.query().$promise.then(function(messages){
$scope.messages = messages.filter(function(obj) {
return (obj.id != 6);
});
});
或者您也可以这样做(使用您现有的代码):
$scope.messages.$promise.then(function(messages){
//Since you are overwriting the object here, there will no longer be a $Promise property so be careful about it when you try to chain through elsewhere after this
$scope.messages = messages.filter(function(obj) {
return (obj.id != 6);
});
});
我有一个名为 Message
的服务,可以从 API 发送 returns 条消息。它看起来像这样:
app.factory('Message', function($resource) {
return $resource('http://localhost:3000/messages/:id');
});
它工作正常,我在我的控制器中使用它来将消息分配到我的范围:
app.controller('MessagesCtrl', function($scope, Message) {
$scope.messages = Message.query();
}
当我在浏览器的控制台中登录 $scope.messages
时,如下所示:
[$promise: Promise, $resolved: false]
0: Resource
1: Resource
2: Resource
3: Resource
$promise: Promise
$resolved: true
length: 4
__proto__: Array[0]
到目前为止,一切顺利 - 四个消息。我希望能够专门操作此集合中的元素,例如删除、更新和添加元素。
基于this answer,这是我尝试删除具有特定 id 的邮件的方法:
$scope.messages = $scope.messages.filter(function(obj) {
return (object.id != 6);
});
但这会将 $scope.messages
变成一个空集合。我如何通过 id 从这个资源集合中删除特定元素?另外,我如何用另一个对象替换此集合中的现有元素?
$resource 自动扩展 promise(作为一种方便的方法)并将响应附加到返回的对象本身,这在将数据绑定到视图时非常方便(因为在 promise 解析之后运行的摘要循环将更新DOM with bound object with resolved data ), 但在直接操作数据时尤其如此,尤其是当您在数据解析之前尝试访问它时。因此,如果您想操作数据,则需要等待承诺得到解决。
即:-
//chain through the promise.
Message.query().$promise.then(function(messages){
$scope.messages = messages.filter(function(obj) {
return (obj.id != 6);
});
});
或者您也可以这样做(使用您现有的代码):
$scope.messages.$promise.then(function(messages){
//Since you are overwriting the object here, there will no longer be a $Promise property so be careful about it when you try to chain through elsewhere after this
$scope.messages = messages.filter(function(obj) {
return (obj.id != 6);
});
});