我犯了经典的Begineers错误,把所有的业务逻辑都放在了控制器中,而不是使用服务。
我有一堆函数,我现在想把它们放进一个服务中,并把它们注入我的控制器中。一般来说,有没有一个好的方法来做到这一点?如何做到?
例如,我有一个日期选择器,它作为默认日期设置为从今天起两周。我在像这样的控制器中解决了这个问题
$scope.dt=function(){
$scope.dt=new Date();
$scope.numberOfDaysToAdd=14;
$scope.dt=$scope.dt.setDate($scope.dt.getDate()+$scope.numberOfDaysToAdd);
而在我的html ng-model='dt'
。我现在想把这个逻辑放到一个服务中。我想过使用一个工厂,我做了这样的事情:
app.factory('Datepicker',[function(){
var numberOfDaysToAdd=14;
var addDays=new Date();
addDays.daysToAdd=function(){
addDays = addDays.setDate(addDays.getDate()+numberOfDaysToAdd);
return addDays;
};
return addDays;
}]);
并且在控制器中
$scope.dt = function(){
addDays.daysToAdd()
};
这并不像我所期望的那样奏效。这里出了什么问题?
干杯
您正处于将逻辑放入工厂的正确轨道上!
这可能是几个问题之一。但是,由于您没有发布新控制器的所有代码,我将首先提出问题:您是否将"日期选择器"服务注入控制器中?
其次,您在控制器中使用服务的方式应该调用服务本身(因为服务返回一个对象):
假设您的服务名称为datePickerService,控制器名称为dateCtrl:
controllers.controller('dateCtrl', ['$scope', 'datePickerService', function($scope, datePickerService){
$scope.dt = datePickerService; //How you hook up the service to your controller
datePickerService.addDays(); //How you could call the function as defined in your service
}]);
希望这能有所帮助!