我有一个 REST API,它返回用户对象,其中它的 Angular 色是通过链接到另一个对象指定的。所以 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/"
}
}
我想做的是在 Controller 中获得 Angular 色。我的用户服务如下所示:
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
参数添加到用户服务 GET
操作中,但从未调用该函数。
第二个选项工作得很好——除了我必须硬编码用户 ID。合适的解决方案是以某种方式为我获取用户 ID(我尝试了 this.id
,但没有用)。
完美的解决方案是从给定的 href
创建资源,但由于我无法访问原型(prototype)中的 roles
,所以我不知道该怎么做。
感谢您的任何建议。
最佳答案
这应该可以解决问题
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 键。
关于javascript - AngularJS 中 REST 资源的链接(关系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20476833/