Datepicker собирается в качестве сервисного завода Angular

Я допустил классическую ошибку для начинающих и вложил всю свою бизнес-логику в свои контроллеры вместо использования сервисов.

У меня есть куча функций, которые я сейчас хочу добавить в сервис и добавить их в мои контроллеры. Вообще, есть ли хороший способ сделать это и как?

Например, у меня есть средство выбора даты, которое по умолчанию установлено на две недели с сегодняшнего дня. Я решил это в контроллере, как

$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 ответ

Решение

Вы на правильном пути внедрения логики на заводе!

Это может быть одним из нескольких вопросов. Но так как вы не опубликовали весь свой код для своего нового контроллера, я сначала задам этот вопрос: внедрили ли вы службу 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 
}]);

Надеюсь это поможет!

Другие вопросы по тегам