2014-02-14 63 views
0

我有一個具有productsCtrl.js,看起來像一個angular.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的真正,然後我得到的錯誤:Error: [$resource:badcfg] Error in resource configuration. Expected response to contain an array but got an object

+0

什麼是$ scope.products?你確定它是一個數組?你用調試工具teste?什麼如果你在console.log($ scope.products)之前嘗試拼接()它會發生? – JeffryHouser

+0

@the_在'$ resource'上調用'query'隱式設置'isArray'爲'true'。另外,控制器中的'$ scope.products'會自動初始化爲一個空對象或數組。有關更多詳細信息,請參閱http://docs.angularjs.org/api/ngResource.$resource上的文檔。 – miqid

+0

只是建議))試試restangular.js https://github.com/mgonto/restangular –

回答

1

那麼有一點是明確的,你得在Product資源方法返回單個項目,而不是一個數組。所以,你不應該命名您的控制器屬性products,應該是

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

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