我有一个REST API,它返回User对象,其中的角色是通过链接到另一个对象来指定的。所以在localhost/project/api/users/27/
是JSON对象:
{
"id": 42,
"name": "John",
"prijmeni": "Doe",
"login": "johndoe",
"nickname": null,
"grade": 1.3,
"roles": {
"href": "http://localhost/project/api/users/1716/roles/"
}
}
我要做的是在控制器中获得角色。我的用户服务如下所示:
projectServices.factory('User', ['$resource', 'UserRoles',
function($resource, UserRoles, Role) {
var User = $resource('http://localhost/project/api/users/:id', {}, {
'query': {
method: 'GET',
isArray: true
}
});
return User;
}
]);
我尝试添加(到该资源代码块):
User.prototype.roles= function(){
return UserRoles.get({id:42});
};
这个在ngRepeat中调用时会冻结浏览器。所以我试过
User.prototype.roles = UserRoles.get({id:42});
这是有效的。然后我试了
User.prototype.roles = $resource(this.roles.href, {}, {
'get': {
method: 'GET',
isArray: true
}
});
说,roles
未定义。我还尝试将transformResponse
param添加到用户服务GET
操作中,但该函数从未被调用过。
第二个选项非常合适 - 除了我必须硬编码用户ID。合适的解决方案是以某种方式为我获取用户ID(我尝试this.id
,但这不起作用)。
完美的解决方案是从给定的href
创建资源,但由于我无法在原型中访问roles
,我不知道如何。
感谢您的任何建议。
答案 0 :(得分:1)
这应该可以解决问题
projectServices.factory('UserRoles', function(){
return $resource('http://localhost/project/api/users/:id', {id: @id},
{'query': {
method: 'GET',
isArray: true
})
}
现在你可以用
来调用它UserRoles.get({id:42})
// this makes the request : http://localhost/project/api/users/42
@id 告诉angular使用传递的参数中的 id 键。