角度查询(get)TypeError:对象#<resource>没有方法'push'</resource>

时间:2013-09-16 13:00:37

标签: angularjs

我正在尝试创建一个显示产品目录详细视图的查询。

这是我的服务:

factory('ProductsFactory', function($resource){
    var products = {};

    products.getProducts = function(){
      var productItems = $resource('/api/products/:productId',{
        query: {
          method:'GET',
          params:{
            productId:'productId'
          },
          isArray: true
        }
      });

      return productItems;
    }
    return products;

  });

这是我的控制者:

angular.module('clientApp')
  .controller('ProductCtrl', function ($scope, ProductsFactory, $modal, $log, $stateParams) {
    var productItems = ProductsFactory.getProducts()
    $scope.products = productItems.query();
    $scope.selectedProduct = productItems.get({productId:1});
  });

第一个(productsItems.query())返回所有产品。它有效。

但$ scope.selectedProduct,假设显示所选产品不起作用。

我在控制台中收到此错误:

TypeError: Object #<Resource> has no method 'push'

知道什么是错的吗?

2 个答案:

答案 0 :(得分:3)

奇怪的是,仍然没有得到批准的答案。

正如其他答案和评论中所提到的,问题在于响应是对象而不是数组(或向后。可以通过在资源选项(或isArray: false中设置isArray: true来修复它。相反的情况):

get: {method: 'GET', isArray: false}

但是当你使用$resource时,你应该让它接近REST架构,因此get不应该返回一个数组 - 那里有query

答案 1 :(得分:2)

我想这是因为AngularJS尝试将对象(第二次查询的结果)转换为数组。它可以在你获取所有对象时起作用,但是当你只获取一个对象时它会失败。