2

Я нахожусь в середине игры с угловыми. Я пытаюсь просто извлекать данные из json-файла. Когда я запускаю мой код файла отображается в сети, но данные не отображаются на странице, и я получаю следующее сообщение об ошибке в моей консоли:angularjs TypeError: undefined не является заводской функцией

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

код я использую следующим образом :

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

пример JSon файла

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

Любая помощь или совет высоко ценится.

Благодаря

ответ

2

Убедитесь, что оба завода и контроллер в одном приложении. Я сделал некоторый рефакторинг на заводе, чтобы он стал более многоразовым. Небольшие изменения, если завод. Теперь getReports вернет обещание. Мы можем назвать нашу функцию, когда обещание будет разрешено.

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

Надеюсь, это поможет вам, спасибо.

+1

Вы забыли 'return' в' getReports'. – JLRishe

+0

@JLRishe Спасибо.Обновлен ответ –

+0

@ James213 это вам помогло? –

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