2

I'm in the middle of playing around with angularjs. I'm trying to simply pull data from a json file. When I run my code the file shows up in the network, but the data doesn't show up on the page and I get the following error in my console:

TypeError: undefined is not a function at Ob (lib/angular-1-2/angular.min.js:14:6)

The code I'm using is as follows:

var Services = angular.module('Services', ['ngResource']);
Services.factory('reportFactory', function($http){
    console.log(REPORT_LIST_URL);
    return{
        getReports: function(callback){
            $http.get(REPORT_LIST_URL).success(callback);
        }
    }
});

function ReportsCtrl($scope, $http, reportFactory) {
    $scope.reportsList = [];
    console.log($scope.reportsList);
    console.log("Get report list from json file");
    console.log("before the factory");
    reportFactory.getReports(function(data){
       $scope.reportsList = data;
    });
}

example of the json file

{
  "Reports": {
    "Productivity": [
      {
        "name": "Productivity Summary",
        "value": "Productivity"
      },
      {
        "name": "Time Summary",
        "value": "TimeSummary"
      }
    ]
  }
}

Any help or advice is greatly appreciated.

Thanks

1 Answer 1

2

Ensure that both factory and controller is in same app. I did some refactor in factory so that it will get more reusable. Small changes if factory. Now getReports will return a promise. We can call our function when promise gets resolved.

var Services = angular.module('Services', ['ngResource']);
Services.factory('reportFactory', function($http){
    console.log(REPORT_LIST_URL);
    return{
        getReports: function(){
            return $http.get(REPORT_LIST_URL); //returning promise
        }
    }
});

Services.controller('ReportsCtrl',function($scope, $http, reportFactory) {
    $scope.reportsList = [];
    console.log($scope.reportsList);
    console.log("Get report list from json file");
    console.log("before the factory");
    reportFactory.getReports().then(
    //success callback
     function(data){ 
       $scope.reportsList = data;
    },
    //error callback
    function(data){
       $scope.reportsList = data;
    });
});

Hopefully this will help you, Thanks.

Sign up to request clarification or add additional context in comments.

1 Comment

You forgot the return in getReports.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.