2016-12-20 5 views
5

Я пытаюсь узнать, как извлекать данные внутри фабрики. В настоящее время я использую выборки данных с контроллеромПолучение данных json с фабрикой

factory.js

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; 
       }); 
      } 
     }; 
    }]) 

деталь-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]; 
      }); 
}]); 

продукта detail.html

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

, но когда я измените код, чтобы переместить fecthing внутри фабрики, как это 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]; 
       }); 
      } 
     }; 

деталь-product.js

angular 
    .module('app') 
    .controller('productDetailsCtrl',['$scope','$stateParams', 'Product', function($scope,$stateParams,Product){ 
     Product.find($stateParams.product,function(singleItem){ 
      $scope.singleItem = singleItem; 
     }); 
}]); 

это дает мне ошибку, что данные не определена.

ответ

3

Вы забыли вернуть singleItem с find способ обещать. А затем поместите .then за обещание получить данные от него.

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; 
    }); 
} 

Контроллер

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

, но она по-прежнему дают ReferenceError ошибки: данные не определены, сэр. – GerryofTrivia

+0

@vandi проверить мое редактирование, оно должно исправить проблему –

+0

да, я догадываюсь об этом раньше, но после того, как я изменил, как и вы, у меня теперь есть ошибка, 'id' не определен. Я не знаю, почему это дает мне ошибку. Я просто переведу его на завод. Я пытаюсь добавить 'find: function (id)'. ошибка исчезла, но она не дала мне никакого результата – GerryofTrivia

Смежные вопросы