Angularjs无法从javascript函数调用工厂方法

时间:2017-07-19 12:32:27

标签: javascript angularjs

我正在开发angularjs应用程序。我有一个javascript函数来填充下拉列表。我正在进行http调用以从api获取数据。我有工厂返回数据。下面是代码。

function fillperiod(fillperiodService) {
  fillperiodService.getData().then(function(res) {
    $scope.cal = response.data.data.Period;
  });
}
myapp.factory('fillperiodService', ['$http', '$cookieStore', 'cfg', '$q', function($http, $cookieStore, cfg, $q) {
  var baseurl = cfg.Baseurl;
  var urlapi = baseurl + "api/Vehicle/GetEMIPeriod";
  return {
    getData: function() {
      var q = $q.defer();
      $http.get(urlapi).then(function(response) {
        q.resolve(response);
      }, function(error) {
        q.reject();
      })
      return q.promise;
    }
  }
}]);

上面的代码抛出错误:

  

无法读取属性' getData'未定义的。

我已声明方法getData。我不确定我在上面的代码中缺少什么。我可以帮忙解决这个问题吗?任何帮助,将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:2)

似乎工厂没有注入您的控制器。因此,在您的函数内部,fillperiodService是未定义的。将工厂注入要从中调用其中一种方法的控制器。那就行了。

EDIT : 
myapp.controller('fillPeriod', ['fillperiodService', function(fillperiodService){
    //here you can call your fillpersiodService.methodName
}])

答案 1 :(得分:1)

AngularJS中的注入机制仅适用于创建AngularJS理解的内容(控制器,服务,过滤器......)。从它的外观来看,你只有一个独立的功能,它不会被AngularJS注入。

我希望看起来更接近以下的解决方案可行:

myapp.controller('FillPeriodController', ['$scope', 'fillperiodService', 
  function($scope, fillperiodService) {
    $scope.fillperiod = fillperiod;

    function fillperiod() {
      fillperiodService.getData().then(function(res) {
        $scope.cal = response.data.data.Period;
      });
    }
}]);

答案 2 :(得分:0)

要回答这个问题,我们需要知道调用此函数的上下文。在这种情况下,您应该检查是否注入了这个工厂。