0

我做了古典begginer錯誤,並把我所有的業務邏輯到我的控制器,而不是使用服務。Datepicker作爲服務工廠角

我有一堆功能,現在我想把它放到一個服務中,並將其注入到我的控制器中。 一般來說,有沒有這樣做的好方法?

例如,我有一個日期選擇器,它是從今天開始的兩週內設定的默認日期。我在控制器中解決了這個問題,如

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

因爲我希望這是行不通的。這裏有什麼問題?

乾杯

回答

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 
}]); 

希望這有助於!