4

我有一个 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;
    }
]);

我试图添加(到那个资源代码块):

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,但没有奏效)。

完美的解决方案是从 given 创建资源href,但由于我无法roles在原型中访问,我不知道如何。

感谢您的任何建议。

4

1 回答 1

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

于 2014-11-04T13:39:36.233 回答