我正在尝试创建一个显示产品目录详细视图的查询。
这是我的服务:
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'
知道什么是错的吗?
答案 0 :(得分:3)
奇怪的是,仍然没有得到批准的答案。
正如其他答案和评论中所提到的,问题在于响应是对象而不是数组(或向后。可以通过在资源选项(或isArray: false
中设置isArray: true
来修复它。相反的情况):
get: {method: 'GET', isArray: false}
但是当你使用$resource
时,你应该让它接近REST架构,因此get
不应该返回一个数组 - 那里有query
。
答案 1 :(得分:2)
我想这是因为AngularJS尝试将对象(第二次查询的结果)转换为数组。它可以在你获取所有对象时起作用,但是当你只获取一个对象时它会失败。