Wysyłam żądania do mojego API i używam modułu zasobów AngularJS $. Różni się od $ http, więc nie wiem, jak sobie radzić z błędami.
Moja usługa:
var appServices = angular.module('app.services', ['ngResource']);
appServices.factory('Category', ['$resource',
function($resource){
return $resource('/apicategoryerr/?format=:format', {}, {
query: {
method: 'GET',
params: { format: 'json'},
isArray: true,
}
});
}]);
Mój kontroler:
...
Category.query(function(data) {
console.log(data);
});
...
Chcę coś takiego lub ... Nie wiem, jak radzić sobie z błędami, jeśli moje API nie działa.
Category.query().success(function() {
console.log('success');
}).error(function() {
console.log('error');
});
angularjs
angular-resource
valkirilov
źródło
źródło
Resource.query().$promise.then(function(data) {}, errorFunction)
. Nadal będziesz musiał uwzględniać to w każdym miejscu, w którym używasz zapytania, ale przynajmniej nie będziesz go przedefiniowywać za każdym razem.myResource.$save
imyResource.$delete
jest obietnicą. Możesz więc po prostu zrobićmyResource.$save().then(...)
.Możesz zdefiniować procedurę obsługi błędów na etapie tworzenia zasobu, dodając
interceptor
obiekt w opisie metody zresponseError
właściwością połączoną z funkcją błędu.gdzie
resourceErrorHandler
jest funkcją wywoływaną przy każdym błędzie metody get lub zapytania. W przypadku zadanego problemu jedyną potrzebną jest metoda get. Oczywiście możesz to zastosować do dowolnej akcji.Dla
response
$ resource istnieje inny przechwytywacz , który przechwytuje normalną odpowiedź.Interceptory są częścią
$http
modułu, możesz o nich przeczytać w ich dokumentach .źródło
Oto nowy przykład ES6 (używam TypeScript) na moim ng.resource
a następnie w moim kontrolerze `` szczegół '' wprowadzony do kontrolera będzie oznaczał dane (dobre) lub fałsz w przypadku błędu, gdzie obsługuję wyświetlanie 404.
źródło