2016-12-20 55 views
5

Verileri fabrika içinde nasıl getireceğimi öğrenmeye çalışıyorum. Şu andaVerileri fabrikada json ile getirme

angular 
    .module('app') 
    .factory('Product', ['$http', function($http){ 
     return{ 
      get: function(){ 
       return $http.get('https://raw.githubusercontent.com/vicariosinaga/learn/master/products.json').then(function(response){ 
        return response.data; 
       }); 
      } 
     }; 
    }]) 

detay poduct.js

angular 
     .module('app') 
     .controller('productDetailsCtrl',['$scope','$stateParams', 'Product', function($scope,$stateParams,Product){ 
      $scope.id=$stateParams.id; 
      Product.get().then(function(data) { 
       $scope.singleItem = data.filter(function(entry){ 
        return entry.id === $scope.id; 
       })[0]; 
      }); 
}]); 

ürün detail.html

<a href="{{singleItem.url}}"> 
<p>{{singleItem.id}}</p>  
<p>{{singleItem.name}}</p> 
<img src="{{singleItem.image}}" alt="{{singleItem.name}}"> 
</a>  

ama ben

factory.js kontrolör ile veri alıp kullanıyorum fecthing'i fabrika içindeki hareket ettirmek için kodu değiştir factory.js

return{ 
      get: function(){ 
       return $http.get('https://raw.githubusercontent.com/vicariosinaga/learn/master/products.json').then(function(response){ 
        return response.data; 
       }); 
      }, 
      find: function(){ 
       return $http.get('https://raw.githubusercontent.com/vicariosinaga/learn/master/products.json').then(function(response){ 
        var singleItem = data.filter(function(entry){ 
         return entry.id === id; 
        })[0]; 
       }); 
      } 
     }; 

detay product.js

bana veri tanımlı olmadığı bir hata verir
angular 
    .module('app') 
    .controller('productDetailsCtrl',['$scope','$stateParams', 'Product', function($scope,$stateParams,Product){ 
     Product.find($stateParams.product,function(singleItem){ 
      $scope.singleItem = singleItem; 
     }); 
}]); 

.

cevap

3

singleItem'u, find yönteminin sözünden geri döndürmeyi unutmuşsunuzdur. Ve daha sonra .then'u veri almak için sözün üzerine koyun.

find: function(id){ 
    return $http.get('https://raw.githubusercontent.com/vicariosinaga/learn/master/products.json').then(function(response){ 
     var singleItem = response.data.filter(function(entry){ 
      return entry.id === id; 
     })[0]; 
     return singleItem; 
    }); 
} 

Kontrolör

Product.find($stateParams.id).then(function(singleItem){ 
    $scope.singleItem = singleItem; 
}); 
+0

ama yine de hata ReferenceError vermek: Veri efendim tanımlı değil. – GerryofTrivia

+0

@vandi Düzenlemeyi düzelt, sorunu çözmem gerekiyor –

+0

Evet, sanırım daha önce yaptım, ama yaptığınız gibi değiştirdikten sonra, artık "id" tanımlı değil hata var. Neden onun bana hata verdiğini bilmiyorum. Ben sadece fabrikaya taşıyorum. 'find: function (id)' ı eklemeye çalışıyorum. hata gitti ama bana herhangi bir çıkış vermedi – GerryofTrivia