我的angularjs工厂有什么问题?

时间:2012-12-11 20:53:33

标签: angularjs

我有一个构建应用

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天后感到非常沮丧。可能这很简单...

感谢。

2 个答案:

答案 0 :(得分:4)

使用$resource时,调用.get方法不会返回HTTP调用的响应,它只返回它的承诺。这意味着$ scope.items 将来的未来包含结果。

要确保$scope.items包含HTTP / $资源调用的响应,请在回调中分配$ scope.items:

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

但是,假设你有这个:

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

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

答案 1 :(得分:1)

实际上,看起来您的JSON是一个数组,并且您明确定义了index操作 在哪里设置isArray : true,所以你可能会这样做:

$scope.items = Listings.index();