2015-06-02 2 views
0

Почему угловой говорит мне, что setData не является функцией?Угловой: service.setData не является функцией

angular.module('mdl').factory('DataService', ['$http', '$cookieStore', '$rootScope', 
    function ($http, $cookieStore, $rootScope) { 
     return { 
      setData: function (data) { 
       $rootScope.data = data; 
      }, 
     }; 
    } 
]); 

Это мой контроллер, который вызывает setData.

angular.module('mdl').controller('DataCtrl', ['$scope', '$http', '$location', '$rootScope', 'DataService', 
function($scope, $http, $location, DataService) { 

    $scope.getData = function (id) { 
     $http.post('/rest/data/get', id) 
      .success(function (data, status, headers, config) { 
       DataService.setData(data); 
       $location.path('/main'); 
      }) 
      .error(function (data, status, headers, config) { 

      }); 
    }; 
} 

]);

+0

Вы можете увидеть код, где вы звоните в setData? –

+0

в контроллере использует DataService.setData или ваше имя объекта DataService –

+0

@MathieuBertin добавлен код контроллера. – Squeez

ответ

1

Существует проблема с инъекциями зависимостей, вы объявляете 6 предметов, а в вашей функции у вас есть 5 предметов. И недостающим является DataService.

['$scope', '$http', '$location', '$rootScope', 'DataService', 
function($scope, $http, $location, $rootScope /*Missing*/, DataService) { 
… 
} 
+0

Спасибо. Он работает сейчас. – Squeez

1

Когда вы объявляете функцию в сервисе, вы должны передать ссылку на функцию . Вы можете сделать это, как слишком

angular.module('mdl').factory('DataService', ['$http', '$cookieStore', '$rootScope', 
    function ($http, $cookieStore, $rootScope) { 

      this.setData: function (data) { 
       return data; 
      } 

    } 
]); 

и контроллер делают этот завод как функцию заводском зависимость и вызову с как

$scope.data = DataService.setData(); 

Вы не должны использовать $rootScope. Вместо этого вы должны использовать вызов выше

+0

Но это для обслуживания, и я использую фабрику. Мне нужно использовать '$ rootScope'. – Squeez

+0

Он будет работать для обоих. Вы называете DataService своим заводом – Vineet

1

Замените DataService.setData(data); на ваш контроллер, так как вы переименовали фабрику при ее передаче в качестве параметра.

+0

Это было быстрое редактирование. Все с синтаксисом в порядке. – Squeez

Смежные вопросы