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
}]);
Надеюсь это поможет!