0

我正在尝试进行显示产品目录详细视图的查询。

这是我的服务:

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'

知道有什么问题吗?

4

2 回答 2

3

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

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

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

但是当你使用$resource时,你应该让它接近 REST 架构,所以get不应该返回一个数组 - 就是query这样。

于 2013-11-24T23:51:29.367 回答
2

我猜那是因为 AngularJS 试图将一个对象(第二个查询的结果)转换为一个数组。当您获取所有对象时它可以工作,但是当您只获取一个对象时它会失败。

于 2013-09-16T13:03:53.577 回答