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

标签 javascript rest angularjs hypermedia ngresource

我有一个 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/

相关文章:

javascript - 如何在 CSS 和 Javascript 中为网格区域设置动画?

rest - 如何从我的 angularjs 页面中的 RESTful API 访问服务?

javascript - 如何在angularjs中的对象数组中推送i次

c# - 使 WebAPI 操作异步?

javascript - 使用 React 和 Webpack 编写可嵌入的 Javascript 插件

Javascript 多个 onClick() 函数可以在一次只需要 1 个时同时运行

javascript - 如何使用 jQuery 仅当其他元素包含某些内容时才显示元素?

javascript - 在 JavaScript 中从 json 中提取数据

java - 使用 Jersey Client 将输出流获取到请求主体?

javascript - http Action 工厂 AngularJS 和 typescript