Передать значение $ scope от контроллера в сервисную функцию

0

Мне нужно передать значение области в службу, то, что я сейчас делаю, - это убрать функцию обслуживания в контроллере и передать значение области в качестве параметра этой функции. Вот код

HTML-код

<md-datepicker ng-model="dateDebut"   md-placeholder="Enter date"> </md-datepicker>
<md-datepicker ng-model="dateFin"  md-placeholder="Enter date" ></md-datepicker>

Код контроллера

app.controller('graphCtrl', function($scope, $stateParams, graphDetails, $filter,$http) { 

  var self = this;

  self.dateDebut = $scope.dateDebut;
  self.dateFin = $scope.dateFin;

  var mettreAJour = graphDetails.mettreAJour(self.dateDebut, self.dateFin);

  $scope.labels = mettreAJour.labels;
  $scope.data = mettreAJour.data;
});

Код услуги

app.factory('graphDetails', function($filter, $http) {
  var labels = [];
  var data = [
    []
  ];

  return {
    mettreAJour: function(dateDebut, dateFin) {
      if (dateDebut && dateFin) {
        var dd = $filter('date')(dateDebut, 'yyyy-MM-dd;HH:mm:ss');
        var df = $filter('date')(dateFin, 'yyyy-MM-dd;HH:mm:ss');
        var dif = dateFin.getDate() - dateDebut.getDate();

        //do somthing with labels and data
        return {
          labels : labels,
          data : data
        };

      }
    }
  };
});

Поэтому я получаю, что метки ошибок не определены, и если я прокомментирую это, я получаю эту ошибку:

Cannot read property 'getDate' of undefined

что означает, что код не распознает dateFin или dateDebut.

Есть ли другой способ передать область обслуживания, или я что-то пропустил в своем текущем коде?

  • 0
    Я предполагаю, что, передавая ссылку на ваш объект вашему сервису, вы можете сделать копию ваших объектов даты с помощью angular.copy назначить их полям вашего сервиса и изменить эти поля в функции сервиса.
  • 0
    Ну, функция mettreAJour возвращает undefined если mettreAJour либо из аргументов не определен. Неудивительно, что следующая строка будет генерировать $scope.labels = mettreAJour.labels; , Вам нужно проверить, прежде чем пытаться получить доступ к свойству $scope.labels = mettreAJour&&mettreAJour.labels;
Показать ещё 1 комментарий
Теги:

2 ответа

0
Лучший ответ

Если я правильно понял вопрос, вам нужно каким-то образом повторно использовать значения, когда dateDebut свойства dateDebut или dateFin.

Чтобы достичь этого, вы можете использовать $watch или $watchGroup методы области. Упрощенная демонстрация.

Например

app.controller('graphCtrl', function($scope, graphDetails) {

  // start watcher
  $scope.$watchGroup(['dateDebut', 'dateFin'], function(args) {
    var debut = args[0], fin = args[1];
    angular.extend($scope, graphDetails.mettreAJour(debut, fin))
  })
})
  • 0
    Спасибо за ваш ответ, $ scope. $ WatchGroup работает нормально, теперь моя функция распознает мои параметры dateDebut и dateFin
0

Скорее всего, это связано с тем, что вы пытаетесь вернуть labels из mettreAJour но не знаете labels и data.

Надеюсь, что этот ниже фрагмент будет полезен.

app.factory('graphDetails', function($filter, $http) {
  var _graphDeatilsObject = {};
  _graphDeatilsObject.labels = [];
  _graphDeatilsObject.data = [
    []
  ];

  _graphDeatilsObject.mettreAJour = function(dateDebut, dateFin) {
    // Rest of the code
  }
  return _graphDeatilsObject;
});

Также обратите внимание на встроенную аннотацию массива, которая требуется, если вы уменьшаете код

  • 0
    Спасибо за ваш ответ, но я все равно получаю те же ярлыки с ошибками не определено.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню