资源查询问题

时间:2014-02-14 03:56:45

标签: javascript angularjs

我有一个angular.js应用程序,其productCtrl.js看起来像:

app.controller('ProductsCtrl', ['$scope', 'Api', function($scope, Api) {
   $scope.products = Api.Product.query();

       //Delete Product
       $scope.deleteProduct = function(productId, idx) {
                Api.Product.remove({productId: productId});
                $scope.products.splice(idx, 1);
       };

 }]);

和Api工厂:

   app.factory('Api', ['$resource', function($resource) {
        return {
                 Product: $resource(
                            '/api/products/:productId',
                             {productId: '@productId'},
                             {'query': {method: 'GET', isArray: false }}
                 ),
                 Item:  $resource(
                             '/api/items/:itemId',
                             {itemId: '@itemId'}
                         )
                 };
              }
      ]);

如果我更改为$scope.products = Api.Product.get();,并尝试拼接方法,则会显示TypeError: Object #<Resource> has no method 'splice'

如果我保持代码相同(就像上面显示代码的方式,但将 isArray 更改为 true ,那么我会收到错误:{{1} }

1 个答案:

答案 0 :(得分:1)

有一件事是清楚的,你得到Product资源上的方法返回单项而不是数组。因此,您不应将控制器属性命名为products。它应该是

$scope.product = Api.Product.query();

//Delete Product
$scope.deleteProduct = function(productId, idx) {
            Api.Product.remove({productId: productId});
            $scope.product=null;
   };