如何根据产品ID编写Angular Service以获取特定产品?

时间:2016-09-10 07:53:00

标签: javascript jquery angularjs json angular-services

我有JSON API,它有9个产品,我如何编写服务来获得基于productID的单个产品(JSON每个产品都有PRODUCTID)。这是我的JSON LINK https://api.myjson.com/bins/5a403我知道如何使用routeparams获取特定的ID我所需要的只是重写服务以获得单个产品

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

2 个答案:

答案 0 :(得分:0)

您可以从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;
    });
}

我认为应该这样做。

答案 1 :(得分:0)

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 。< / p>