从控制器调用工厂的功能

时间:2016-06-06 05:41:51

标签: javascript angularjs

我已经创建了一个工厂,它向我的同学和我创建的api发出了一个http get请求。出于某种原因,我的控制器接受来自表单的提交请求的参数返回: 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);
  }
}]);

1 个答案:

答案 0 :(得分:0)

您未从Factory服务返回。您需要返回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