在对象数组上使用$ resource.query

时间:2015-06-12 18:55:07

标签: angularjs ngresource

的Json

[ { "id":"0", "name" : "BCAA & GLUTAMINE", "brand" : "NRG FUEL", "price": "20", "description": "NRGFUEL 100% BCAA & Glutamine powder has been scientifically formulated to promote full muscle recovery, growth and repair whilst preventing muscle breakdown. Consisting of our instantized BCAA (2:1:1 RATIO) and absolute pure glutamine NRGFUEL’S BCAA and Glutamine powder will keep you in a positive state of growth and recovery. If you train hard, you need to recover hard.", "img" : "images/products/dietforcewhey.jpg" }, { "id":"1", "name" : "WHEY PLUS RIPPEDCORE", "brand" : "SCISMX NUTRITION", "price": "20", "description": "NRGFUEL 100% BCAA & Glutamine powder has been scientifically formulated to promote full muscle recovery, growth and repair whilst preventing muscle breakdown. Consisting of our instantized BCAA (2:1:1 RATIO) and absolute pure glutamine NRGFUEL’S BCAA and Glutamine powder will keep you in a positive state of growth and recovery. If you train hard, you need to recover hard.", "img" : "images/products/wheyplusrippedcore.jpg" } ]

控制器

app.controller('productDetails', ['$scope', '$routeParams', 'productService', function ($scope, $routeParams, productService) {
$scope.products = productService.query();
$scope.product = $scope.products[$routeParams.id];


console.log($scope.product)

}]);

服务

app.factory('productService', ['$resource', function ($resource) {
return $resource('json/products.json'); 

}]);

当我的console.log $ scope.product我得到' undefined'但scope.products工作正常。

有人可以解释一下我做错了吗?。

1 个答案:

答案 0 :(得分:1)

啊,在使用$ resource时,这总是我最头疼的问题之一!

问题是$ scope.products = productService.query();是异步的。这意味着$ scope.product将被设置为尚不存在的东西。也就是说,代码直接跳过.query()直到该行。

您需要做的是将该语句放在异步函数的回调中,以便它在完成时运行。像这样:

$scope.products = productService.query(function(result){
  $scope.product = result[$routeParams.id];
});

希望有所帮助! :)