按服务获取JSON数据

时间:2016-05-01 06:29:52

标签: javascript angularjs

我想通过id获取特定类别。我使用$ http方法填充了dummyjson数据。我无法做到这一点。我已将id从我的服务传递给控制器​​,但它返回null。这是我的代码

service.js:

(function() {
    angular.module('myApp')
        .factory('registerService', function ($http) {
         var category=[];
            return {
                getAll:function(){
                    return $http.get('json/dummyJson.json').then(function(response){
                        category=response.data;
                        return category;
                    });
                },
                getUser:function(category_id)
                {
                    for(var i=0;i<category.length;i++){
                        console.log(category.length);
                        if(category[i].id === parseInt(category_id)){
                            return category[i];
                        }
                    }
                    return null;
                }


            }
        });
})();

controller.js:

 (function() {
        angular.module('myApp').controller('registrationCtrl1', function ($scope, $stateParams, registerService) {
          console.log('inside registerCtrl2');
          $scope.categoryName=registerService.getUser($stateParams.category_id);
            console.log($stateParams.category_id);
            console.log($scope.categoryName);
        });
    })();

1 个答案:

答案 0 :(得分:0)

您假设categorygetUser内有价值,但这不会发生。填充类别的唯一位置是getAll,但由于您未调用getAll,因此未填充类别。按照下面的方法进行操作,它将起作用:

getUser: function(category_id) {
  return $http.get('json/dummyJson.json').then(function(response){
    category=response.data;
    for(var i=0;i<category.length;i++) {
      console.log(category.length);
      if(category[i].id === parseInt(category_id)){
        return category[i];
      }
    }

    return null;
 });
}

由于您的方法现在返回一个promise,您需要在控制器的回调中处理promise:

angular.module('myApp').controller('registrationCtrl1', function ($scope, $stateParams, registerService) {
      console.log('inside registerCtrl2');
      registerService.getUser($stateParams.category_id)
        .then(function (response) {
          $scope.categoryName= response;
          console.log($stateParams.category_id);
          console.log($scope.categoryName);
        });
    });