Как я могу написать Angular Service, чтобы получить конкретный продукт на основе идентификатора продукта?

У меня есть JSON API, который имеет 9 продуктов, как я могу написать сервис для получения одного продукта на основе productID (JSON имеет PRODUCTID для каждого продукта). Вот моя ССЫЛКА JSON https://api.myjson.com/bins/5a403 Я знаю, как чтобы использовать параметры маршрута для получения определенного идентификатора, все, что мне нужно, это переписать службу, чтобы получить один продукт

 var app=angular.module('myApp');
   app.service('productservice', function($http){
        this.productlists=function(index)
        {
           return $http.get("https://api.myjson.com/bins/5a403")
            .success(function(data) {
            return data;
         })
          .error(function(data) {
          return data;
         });
        };
      });

person Kannan T    schedule 10.09.2016    source источник


Ответы (2)


var app=angular.module('myApp');
   app.service('productservice', function($http){
        this.productlists=function(index)
        {
           return $http.get("https://api.myjson.com/bins/5a403")
            .success(function(data) { 

             // lets assume productId=1;
            data=data.filter(function(item){
               if(item.productId==productId){
                 return item;
               }
            })
            return data;
         })
          .error(function(data) {
          return data;
         });
        };
      });

ПРИМЕЧАНИЕ. Вы можете вернуть обещание (как уже показано в другом ответе) и также использовать .filter для объекта данных в контроллере.

person micronyks    schedule 10.09.2016

Вы можете вернуть promise из файла service.

var app=angular.module('myApp');
 app.service('productservice', function($http){

    this.productlists=function(productId) {
       var _promise = $http.get("https://api.myjson.com/bins/5a403")
                  .then(function(response){                        
                      // assign the product by filtering based on productId
                      var requiredObj = response.filter(function(product){
                         if(product.productId == productId){
                            return product;
                         }
                      });

                    return requiredObj;
                  });
       return _promise;
    };
  });

И в вашем controller вы можете получить UIstateparams, из которого вы можете извлечь id => передать его в свой сервис следующим образом.

$scope.yourMethod = function(id){
    productservice.productlists(id).then(function(data){
       $scope.yourModel = data;
    });
}

Я думаю, что это должно помочь.

person Paritosh    schedule 10.09.2016
comment
Но это вернет мне все 10 продуктов, мне нужно получить информацию о конкретном продукте. - person Kannan T; 10.09.2016
comment
Братан, который вернет только 0-й продукт, который я хочу получить через UIstateparams, как я могу отправить эти параметры состояния в службу, вот как выглядит мой код app.controller('singleproductcontroller',['$scope','$stateParams','productservice ',функция($scope,$stateParams,productservice)productservice.productlists().then(функция(ответ) $scope.count=0; $scope.products=response.data[$stateParams.id-1]; }] ); - person Kannan T; 10.09.2016