我正在开发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。我不确定我在上面的代码中缺少什么。我可以帮忙解决这个问题吗?任何帮助,将不胜感激。谢谢。
答案 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)
要回答这个问题,我们需要知道调用此函数的上下文。在这种情况下,您应该检查是否注入了这个工厂。