我有结构API:
api: {
users: {
details: {},
actions: {}
},
settings: {
users: {}
}
}
例如:
GET / api / users
返回用户列表
GET / api / users / 1
返回ID为1的用户
GET / api / users / 1 / details
返回用户检测
GET / api / users / 1 / details / photo
使用别名照片返回用户胎儿
我写了
.factory('userService', function($resource){
return $resource('/api/users/:id/:items/:itemsId', {}, {
query: { method: 'GET', isArray: false }
});
});
现在我可以执行userService.query()并获取用户列表
但如果我不能这样做:
var users = userService.query();
users[1].name = 'newName';
users[1].save();
用户[1]不要t save edited info because users[1] don
使用资源方法,资源仅限用户使用。
我不能这样做:
var users = userService.query();
users[1].get('deteils');
如何为我的所有结构添加资源方法?
答案 0 :(得分:0)
首先,您必须使用$符号为实例方法添加前缀,例如users[1].$save()
。
那么为什么要将isArray
设置为false
,但将结果视为数组?
您还应该将id
参数绑定到用户的id属性。我假设它被称为id
。
所以你会做这样的事情:
.factory('userService', function($resource){
return $resource('/api/users/:id/:items/:itemsId', { id: '@id' });
});
请注意,您必须在通话中指定参数items
和itemsId
,否则将被排除在外。
e.g:
var users = userService.query();
users[1].name = 'newName';
// assume users[1].id===1
users[1].$save();
// will do a POST /api/users/1
users[1].$get({ items: 'details' });
// will do a GET /api/users/1/details
users[1].$get({ items: 'details', itemsId: 'photo' });
// will do a GET /api/users/1/details/photo
PS:也许您还应该检查默认方法(列出的here)是否适合您的REST API,否则您应该定义自己的。