2

我有一个构建应用程序

var HappySundayonEtsyApp = angular.module('HappySundayonEtsyApp', ['ngResource']);

用一个控制器

HappySundayonEtsyApp.controller('ListingsController',
function ListingsController ($scope, $filter, Listings, $resource) {
$scope.sortingOrder = sortingOrder;
...

控制器工作正常,控制器中添加了一些静态 JSON 以进行测试。当我尝试使用定义为的服务获取数据时

HappySundayonEtsyApp.factory('Listings', ['$resource', function ($resource) {
var resource = $resource('/listings/:id', { 
  id : '@id' 
}, {
  index : { method: 'GET', isArray : true },
  save : { method : 'PUT' }
});
return resource;
}]);

并在控制器中

$scope.items = Listings.get()

没有任何作用。该 URL 提供了完美的 JSON,正如我通过一个简单的验证

$http.get('/listings/').success(function(data){
   $scope.items = data;
});

在调试器(Chrome)中我看到

Listings.get(): h
  __proto__: h

我使用的是 1.0.3 版。如果有人可以提供帮助,我将不胜感激,在阅读、尝试和调试 2 天后,我感到非常沮丧。大概是一件很简单的事情……

谢谢。

4

2 回答 2

4

使用时$resource,调用该.get方法不会返回来自 HTTP 调用的响应,它只是返回它的一个 Promise。这意味着 $scope.items将在未来包含结果。

为确保$scope.items包含 HTTP/$resource 调用的响应,请改为在回调中分配 $scope.items:

Listings.get(function (response) {
    $scope.items = response;
});

但是,假设你有这个:

<ul>
    <li data-ng-repeat="item in items"></li>
</ul>

然后你可以使用这个:$scope.items = Listings.get()由于当承诺被履行时,repeat 将被更新并迭代所有项目。

于 2012-12-11T21:52:41.510 回答
1

实际上,看起来您的 JSON 是一个数组,并且您专门定义index了您设置的操作isArray : true,因此您可能打算这样做:

$scope.items = Listings.index();
于 2012-12-11T21:23:53.933 回答