【问题标题】:AngularJS $resource only won't return dataAngularJS $resource 仅不会返回数据
【发布时间】:2014-05-12 20:36:42
【问题描述】:

所以对于工厂,我正在使用 $resource 发出 RESTful GET 请求,但我没有取回数据。

最初,我得到返回 $promise 和 $resolved: false。 $resolved 最终变为 true。

我知道 url,并且标头可以正常工作,因为我在高级客户端 chrome 扩展中对其进行了测试,并且可以正常工作。数据显示和一切。

这是我的工厂设置,下面是我在控制器中引用以将其存储在范围变量中的内容。

【问题讨论】:

  • 我面临同样的问题,建议的答案都不适合我。这是我得到的: Object { $promise: Object, $resolved: true, 1421589555: true } 其中真实数据是最后一个条目。

标签: javascript angularjs angularjs-service angular-services


【解决方案1】:

你需要利用来自$resource的回调:

GetValues.get({}, function(data) {
    $scope.terms = data;
})

【讨论】:

  • 你能用上面的方法记录它并发布输出吗?
  • 尝试在方法侧登录到控制台,日志中没有任何内容
  • 更新了答案,相信你需要传递空白参数,你可以再试一次吗?
  • 只是为了确保我做对了,可能在我身上。我只是用这个替换我的控制器线吗?
  • 事实证明,只需添加 {} 以定义为向量就可以了。感谢您的帮助
【解决方案2】:

$resource 返回一个两级对象。在您的控制器中,它需要像这样处理:

$scope.terms = GetValues.get();
$scope.terms.$promise.then(function(data){
     //This is where things that happen upon success go
}, function(data){
     //This is where things that happen upon error go
});

您还可以编写您的服务以如下方式返回,并从您的控制器中消除 $promise:

.factory('GetValues', ['$resource', function($resource){
// search term is :text
return $resource(apiURL,   {}, {
    get:{
      method: 'GET',
      isArray:true,
      headers: {
          'x-auth-token': 'xxxxx',
          'x-auth-user':  'xxxxx'
      }
    }
  }).$promise;
}]);

【讨论】:

  • 感谢这个。它让我知道我的 api 调用失败了。
  • 对于状态,我得到了 404
  • 是的,但关键是你得到了一些东西,以前你没有。
  • 你的回答是第一个给我我需要的代码结果,所以你得到了检查。再次感谢!
【解决方案3】:

$resource 构造函数返回一个对实际调用的承诺。您必须在控制器中为 promise 设置解析回调。

GetValues.get({}, '', function (getResult) {
    // do something with array
    alert(getResult);
}, function (error) {
    console.error('Error getting values', error);
});

第二个函数是请求的错误回调。

另外,尝试用另一个名称注册方法,因为覆盖需要对象而不是数组的本机 get 并不是很“好”:

return $resource(apiURL,{},{ getValues:{
    method: 'GET',... 

并调用它使用

GetValues.getValues().then(... 

PD:无需显式返回 .$promise

【讨论】:

  • 谢谢 GonchuB!我会试一试,看看会发生什么。
  • 嘿。此方法返回 f 则没有方法。我仍然需要在此之前添加 $promise 才能使其正常工作。
  • 很抱歉。为了让 'then' 工作,你需要 $promise。您可以通过在资源调用中声明回调来将其关闭。我编辑了我的答案以匹配这个(注意第一次得到)。希望对您有所帮助,并对造成的混乱表示歉意。
  • 较旧版本的 Angular $resource 没有返回 .$promise,但较新的版本(1.2+)有并且您必须处理它,无论是在您的服务中还是在您的控制器中.
  • 别担心,很高兴得到帮助 :) 在使用 echo.jsontest.com/key/value/one/two 测试后,您的回答帮助我发现问题与我的代码无关。我的应用程序返回 404 的 API 中的服务是 .Net 构建的,所以我必须与那边的开发人员交谈才能弄清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多