Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS中REST资源的链接(关系)_Javascript_Rest_Angularjs_Hypermedia_Ngresource - Fatal编程技术网

Javascript AngularJS中REST资源的链接(关系)

Javascript AngularJS中REST资源的链接(关系),javascript,rest,angularjs,hypermedia,ngresource,Javascript,Rest,Angularjs,Hypermedia,Ngresource,我有一个REST API,它返回用户对象,其中的角色通过链接到另一个对象来指定。所以在localhost/project/api/users/27/是JSON对象: { "id": 42, "name": "John", "prijmeni": "Doe", "login": "johndoe", "nickname": null, "grade": 1.3, "roles": { "href": "http://local

我有一个REST API,它返回用户对象,其中的角色通过链接到另一个对象来指定。所以在
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;
    }
]);
我尝试添加(到资源代码块):

当在ngRepeat中调用此选项时,浏览器将冻结。所以我试过了

User.prototype.roles = UserRoles.get({id:42});
这很有效。然后我试着

User.prototype.roles = $resource(this.roles.href, {}, {
   'get': {
      method: 'GET',
      isArray: true
   }
});
表示,
角色
未定义。我还尝试将
transformResponse
param添加到用户服务
GET
操作中,但该函数从未被调用

第二个选项工作得非常好-除了,我必须硬编码用户ID。合适的解决方案是以某种方式为我获取用户ID(我尝试了
this.ID
,但没有成功)

完美的解决方案是从给定的
href
创建资源,但由于我无法访问原型中的
角色,我不知道如何访问


谢谢你的建议

这应该能奏效

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键

UserRoles.get({id:42})  
// this makes the request :     http://localhost/project/api/users/42