Я работаю с $http
в angularjs 1.4.7.
Мне нужно отделить свои контроллеры от любых $http
запросов. Таким образом, я создал службу следующим образом:
app.service('MyService', function($http, $q, $rootScope) {
this.getcustomers = function() {
var deferred = $q.defer();
$http({
method: 'GET',
url: 'http://call/to/rest/api'
}).then(function successCallback(response) {
deferred.resolve(response.data);
}, function errorCallback(response) {
deferred.reject(error);
});
return deferred.promise;
};
});
Тогда в моем контроллере я называю это сервис следующим образом:
app.controller('registerationCtrl', ['$scope', '$http', 'MyService', '$location', function($scope, $http, MyService, $location) {
$scope.custlst = [];
$scope.getcustomers = function() {
var x = MyService.getcustomers().then(function(data) {
$scope.custlst = data;
}, function(err) {
alert(err);
});
}
}]);
Теперь, выше не работает он дает мне ReferenceError
ошибки в настоящее время определены и указывает на функцию errorCallback
в сервисе.
Вопрос 1: Что не так со сценарием? Вопрос 2: Важно ли использовать $q
? Помните, что сервер может быть медленным.
Спасибо.
'error' переменная внутри' errorCallback' не определен, следовательно, ошибка ... вы, вероятно, имел в виду, чтобы сделать 'функцию errorCallback (ошибка) {...}' вместо 'function errorCallback (response) {...}'. И нет, вам не нужно было использовать '$ q' - вы могли бы просто вернуть обещание, уже сгенерированное' $ http' –
Yup, что исправил его благодаря помощнику – user3052526