Datepicker作为Service Factory Angular

时间:2014-10-07 08:46:20

标签: angularjs model-view-controller datepicker factory service-factory

我让经典的begginers错了,把我所有的业务逻辑都放到我的控制器中,而不是使用服务。

我有一堆函数,我现在想把它们放入一个服务中并将其注入我的控制器中。 一般来说,这样做有什么好办法吗?

例如,我有一个日期选择器,作为默认日期设置为从今天开始的两周。我在控制器中解决了这个问题,如

$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()
  };

这不像我预期的那样有效。这里的问题是什么?

干杯

1 个答案:

答案 0 :(得分:0)

你正在把逻辑放入工厂的正确轨道上!

这可能是几个问题之一。但是既然你没有为你的新控制器发布所有代码,我首先要问的是:你是否将“Datepicker”服务注入了你的控制器?

其次,在控制器中使用服务的方式应该调用服务本身(因为服务返回一个对象):

假设您的服务名称是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 
}]);

希望这有帮助!