API的AngularJS资源结构

时间:2013-11-28 06:59:10

标签: javascript angularjs angularjs-service

我有结构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');

如何为我的所有结构添加资源方法?

1 个答案:

答案 0 :(得分:0)

首先,您必须使用$符号为实例方法添加前缀,例如users[1].$save()

那么为什么要将isArray设置为false,但将结果视为数组?

您还应该将id参数绑定到用户的id属性。我假设它被称为id

所以你会做这样的事情:

.factory('userService', function($resource){
    return $resource('/api/users/:id/:items/:itemsId', { id: '@id' });
});

请注意,您必须在通话中指定参数itemsitemsId,否则将被排除在外。 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,否则您应该定义自己的。