来自Angular文档:
var cards = CreditCard.query(function() {
// GET: /user/123/card
// server returns: [ {id:456, number:'1234', name:'Smith'} ];
var card = cards[0];
// each item is an instance of CreditCard
expect(card instanceof CreditCard).toEqual(true);
card.name = "J. Smith";
// non GET methods are mapped onto the instances
card.$save();
// POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'}
// server returns: {id:456, number:'1234', name: 'J. Smith'};
// our custom method is mapped as well.
card.$charge({amount:9.99});
// POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'}
});
上面的代码使用GET请求从服务器获取CreditCard
数组,然后使用$ {1}}或$save()
等资源类方法自动将API调用返回给服务器。但是,我遇到了两个问题
问题1
$delete()
变量需要来自服务器的数组,并且可以将每个cards
视为card in cards
,并使用上述方法进行API调用。但我们的API响应始终采用以下格式:
$resource
结果是实际数据,或者在本例中是{
success: true,
error: null,
status: 1,
result: [] // THIS IS THE ACTUAL RESULT
}
数组。因此,使用我们的API响应运行相同的代码不会在运行cards
问题2
我很好奇是否可能(并且可能已经自动支持)使用card.$save()
处理绑定到DOM的对象与ng-repeat
调用后创建的对象完全相同。
例如,假设我有相同的$resource
API调用来获取一组卡片,然后将它们设置为控制器中的CreditCards.query()
变量。然后我在我的DOM中有$scope.cards
来显示所有卡片。在DOM中的每个ng-repeat="card in cards"
上,我还要附加一个card
,它将从ng-click="deleteCard(card)"
数组中删除相应的卡,并使用该命令向服务器发送DELETE请求特定卡作为请求中的正文
所以$scope.cards
函数可能看起来像这样:
deleteCard()
我们可以使用此功能吗?我的猜测是Angular会允许这种情况发生
答案 0 :(得分:0)
问题#1:
当您使用$resource
时,您可以覆盖现有方法和/或添加新方法,以便它可以与您的服务器API一起使用。
你会想做这样的事情:
function transformQueryResponse(data) {
return JSON.parse(data).result;
}
$resource('/cards/:card_id', {id: '@id'}, {
query: { method: 'GET', isArray: false, transformResponse: transformQueryResponse }
});
他们举例说明了在documentation for $resource底部创建自定义PUT请求。
问题#2:
是的,你可以这样做。当您从服务器获取$ resource对象时,在ng-repeat
中使用它们时,它们将继续充当资源。