2016-06-06 9 views
0

Я создал фабрику, которая делает HTTP-запрос для api моих одноклассников, и я создал. По какой-то причине мой контроллер, который принимает заявку от формы для параметров нашего запроса, возвращает: angular.js:9101 TypeError: Cannot read property 'crawlWeb' of undefinedФункция вызова на заводе от контроллера

Целью является использование другого контроллера для управления данными в другом месте. Я пробовал смотреть в нескольких местах и ​​нашел похожие примеры, но все же, похоже, имеет ту же ошибку. AngularJS: Cannot call function in factory https://github.com/amitavroy/learningci/blob/06_angularjs_factory_02/js/singlepage/singlepage_module.js

Там, кажется, что-то не так с моей заводской настройки, не позволяя мои контроллеры доступа к своим членам.

Фабрика:

myApp.factory('SharedData', ['$http', '$rootScope', function($http, $rootScope) { 
 
    var requestReturn = {}; 
 

 
    requestReturn.result = function(p) { 
 
     return $http({ 
 
     headers: {'Content-Type': 'application/x-www.form-urlencoded'}, 
 
     url: 'http://www.capstone-crawler.appspot.com/crawler', 
 
     method: 'GET', 
 
     params: p, 
 
     }) 
 
     .then(function(response) { 
 
     requestReturn = response; 
 
     $rootScope.$broadcast('theReturn', response); 
 
     }) 
 
    } 
 
}]);

Контроллер:

myApp.controller('FetchController', ['$scope', function($scope, SharedData) { 
 
    
 
    $scope.setParams = function(tosend) { 
 
    
 
    var toSubmit = { 
 
     pages: $scope.tosend.pagesToCrawl, 
 
     depth: $scope.tosend.crawlDepth, 
 
     start: $scope.tosend.webCrawlURL, 
 
     keyword: $scope.tosend.keyWord 
 
    } 
 
    console.log(toSubmit); 
 
    SharedData.crawlWeb(toSubmit); 
 
    } 
 
}]);

+0

вам нужно 'return' что-то от фабрики в противном случае используйте' services' – candidJ

ответ

0

Вы не возвращаются из Factory service.Yo u необходимо вернуть объект requestReturn для использования сервиса SharedData.

Также нет функции crawlWeb на заводе SharedData.

myApp.factory('SharedData', ['$http', '$rootScope', function($http, $rootScope) { 
     var requestReturn = {}; 

     requestReturn.result = function(p) { 
      // Rest of code 
     }, 

     requestReturn.crawlWeb=function(){ 
     alert("service Called"); 
     } 
     return requestReturn; 

    }]); 

См. Это DEMO.

Здесь я называю SharedData.crawlWeb по нажатию кнопки

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