Рефакторинг кода в одну функцию для моментов - PullRequest
0 голосов
/ 09 мая 2018

У меня есть 2 функции prev () и next (), которые имеют почти одинаковый код.

Можно ли объединить 2 функции в одну функцию?

<button id="prev-search-button" ng-click="prev()"><</button>  
<button id="next-search-button" ng-click="next()">></button> 

$scope.prev = function(){ 
  var search = $scope.inputDate ? $scope.inputDate: moment() ;  
  $scope.day = moment(search).subtract(1, 'days').format('DD'); 
  $scope.month=moment(search).subtract(1, 'days').format('MM'); 
};

$scope.next = function(){
  var search = $scope.inputDate ? $scope.inputDate: moment();  
  $scope.day = moment(search).add(1, 'days').format('DD');
  $scope.month = moment(search).add(1, 'days').format('MM'); 
};

Я попробовал следующее, но не работает

<button id="prev-search-button" ng-click="prevAdd(subtract)"><</button> 
<button id="prev-search-button" ng-click="prevAdd(add)"><</button>  

$scope.prevAdd = function(arg){  
  var search = $scope.inputDate ? $scope.inputDate: moment() ;  
  $scope.day = moment(search).arg(1, 'days').format('DD'); 
  $scope.month=moment(search).arg(1, 'days').format('MM'); 
};

1 Ответ

0 голосов
/ 09 мая 2018

Первый: ng-click="prevAdd(subtract)", ng-click="prevAdd(add)" неверны, передайте аргумент в виде строки или целого числа, например ng-click="prevAdd('subtract')", ng-click="prevAdd('add')"

Секунда: В moment(search).arg нет метода arg, он имеет только add и subtract. Поэтому следующее утверждение неверно:

$scope.day = moment(search).arg(1, 'days').format('DD'); 
$scope.month=moment(search).arg(1, 'days').format('MM');

Это должно быть записано как:

  if(arg === 'add') {
     $scope.day = moment(search).add(1, 'days').format('DD'); 
     $scope.month=moment(search).add(1, 'days').format('MM');
  } 
  if(arg === 'subtract') {
     $scope.day = moment(search).subtract(1, 'days').format('DD'); 
     $scope.month=moment(search).subtract(1, 'days').format('MM');
  }  

Пожалуйста, используйте следующий окончательно измененный код:

<button id="prev-search-button" ng-click="prevAdd('subtract')"><</button> 
<button id="prev-search-button" ng-click="prevAdd('add')"><</button>  

$scope.prevAdd = function(arg){  
  var search = $scope.inputDate ? $scope.inputDate: moment() ; 
  if(arg === 'add') {
     $scope.day = moment(search).add(1, 'days').format('DD'); 
     $scope.month=moment(search).add(1, 'days').format('MM');
  } 
  if(arg === 'subtract') {
     $scope.day = moment(search).subtract(1, 'days').format('DD'); 
     $scope.month=moment(search).subtract(1, 'days').format('MM');
  }  
};
...