我有一个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} }
答案 0 :(得分:1)
有一件事是清楚的,你得到Product
资源上的方法返回单项而不是数组。因此,您不应将控制器属性命名为products
。它应该是
$scope.product = Api.Product.query();
//Delete Product
$scope.deleteProduct = function(productId, idx) {
Api.Product.remove({productId: productId});
$scope.product=null;
};