【问题标题】:Using $resource with rest service将 $resource 与休息服务一起使用
【发布时间】:2015-11-02 22:04:19
【问题描述】:

我正在尝试熟悉 $resource 以便使用 RESTful Web 服务。

所以,为了尝试,我声明了一个这样的工厂:

'use strict';

angular.module('BalrogApp').factory('Req', ['$resource', function($resource) {
  return $resource('http://localhost:8000/api/catalog/requests/:id', {id: '@id'}, {
    'update': { method: 'PUT'},
    'query': { method: 'GET'}
  });
}]);

在我的控制器中我有这个:

angular.module('BalrogApp').controller('requestsController', function(Req, $route, $rootScope, $scope, $location, $routeParams) {
  this.$route = $route;
  var controllerScope = this;

  this.r = Req.get({ id:4 });

  console.log(this.r);

这很好用,在我的控制台中,我可以看到我的对象以及从服务中检索到的 id 为 4 的项目的数据。

但是我不确定我是否正确检索数据,因为我存储在 r 中的对象包含一个 id,就像它应该在对象详细信息中一样(单击浏览器控制台中的“对象”会显示该对象包括其 id 在内的详细信息),但控制台上显示的对象本身 (r) 仅包含 2 个字段,显示如下:Object { $promise: Object, $resolved: false }

因此,最终,console.log(this.r); 有效,但 console.log(this.r.id); 无效,即使 r 应该包含一个 id,就像浏览器检查器的对象详细信息中一样。

此外,我如何配置此服务以便能够使用 get()id 参数,就像我正在做的那样导致调用 http://localhost:8000/api/catalog/requests/:id 但也没有 id 参数导致在调用http://localhost:8000/api/catalog/requests

【问题讨论】:

    标签: javascript angularjs rest angular-resource angularjs-resource


    【解决方案1】:

    由于对 REST API 的调用是异步的,因此您在使用 Req.get({ id:4 }); 时大喊等待返回的承诺解决

    用途:

    Req.get({ id:4 }).$promise.then(function(result){
      console.log(JSON.stringify(result));
    });
    

    改为。

    对于您问题的第二部分:使用没有 id 属性的数据应该没问题。但是,此数据将在请求正文中传输,而不是作为请求参数。

    【讨论】:

    • 感谢您的回复。 “使用没有 id 的数据”是什么意思?我试图用Req.get({ }) 甚至Req.get() 替换Req.get({ id:4 }),但这没有用。您还可以链接我在哪里可以找到有关您使用的$promise 的一些文档吗?
    • 不确定,但Req.get() 或者Req.get(null) 应该可以工作。查看 ngResource 文档的“返回”部分:docs.angularjs.org/api/ngResource/service/$resource 以了解返回的承诺。
    • 好吧,没有参数,这个错误会触发:Error in resource configuration for action get. Expected response to contain an object but got an array (Request: GET http://localhost:8000/api/catalog/requests)$resource('http://localhost:8000/api/catalog/requests/:id' 不是将id 设为必填字段吗?
    • 显然,当我有id 参数时,我需要使用get(),而当我没有获得完整列表时,我需要使用query()
    • 原因是 ngResource 操作的isArray – {boolean=} 选项。默认情况下,它是为query 操作设置的,而不是为get 操作设置的。如果它帮助您让其他有相同问题的人知道,请接受此答案。
    猜你喜欢
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 2012-06-28
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多