【问题标题】:Datepicker going as Service Factory AngularDatepicker 作为服务工厂 Angular
【发布时间】:2014-10-07 08:46:19
【问题描述】:

我犯了经典的初学者错误,将我所有的业务逻辑都放入我的控制器中,而不是使用服务。

我现在想将一堆函数放入服务中并将其注入到我的控制器中。 一般来说,有没有好的方法以及如何做到这一点?

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

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

这不符合我的预期。这里有什么问题?

干杯

【问题讨论】:

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


    【解决方案1】:

    您在将逻辑放入工厂的正确轨道上!

    这可能是几个问题之一。但是由于您没有为您的新控制器发布所有代码,所以我首先会质疑:您是否将“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 
    }]);
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2019-12-26
      • 2016-07-04
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多