Подтвердить что ты не робот

Как добавить обратный вызов для $resource методов в AngularJS

Это может быть обычный случай, когда нам нужно показать сообщение об ошибке/успехе пользователю после того, как он обновит/создаст некоторые данные, как мы можем реализовать его в AngularJS?
Я хочу добавить обратные вызовы, но не смог найти решение. Использование функции $http.post(). Success().() Работает, но мне интересно, могу ли я сделать это с более высоким ресурсом API $. Или мы должны писать директивы или использовать $watch()?
Благодарим вас за помощь.

4b9b3361

Ответ 1

Действиям из класса Resource могут быть переданы успешные и обратные вызовы ошибок, так же как и сервис $ http нижнего уровня.

Из документов

  • HTTP GET действия "класса": Resource.action([параметры], [успех], [ошибка])
  • не "GET" действия класса: Resource.action([параметры], postData, [успех], [ошибка])

Неполученные действия имеют префикс $.

Так что вы можете сделать это

User.get({userId:123}, function(u, getResponseHeaders){
  // this is get success callback
  u.abc = true;
  u.$save(function(u, putResponseHeaders) {
    // This is $save success callback, invoke notification from here
  });
});

Изменение: здесь еще один пример из предыдущего плунжера. Запрос get не будет выполнен, поскольку он запрашивает несуществующий файл json. Будет выполнен обратный вызов ошибки.

someResource.get(function(data){
    console.log('success, got data: ', data);       
}, function(err){
    alert('request failed');
});

Ответ 2

С последними версиями AngularJS вы можете взглянуть на $interceptors, которые являются частью $httpProvider.

Затем вы можете перехватить ВСЕ запросы перед отправкой или после ответа.

angular.module('app').config(function($httpProvider){

  $httpProvider.interceptors.push(function($q) {
    return {
      'request': function(config) {
        console.log('I will send a request to the server');
        return config; 
      },

      'response': function(response) {
        // called if HTTP CODE = 2xx 
        console.log('I got a sucessfull response from server'); 
        return response;
      }

      'responseError': function(rejection) {
        // called if HTTP CODE != 2xx
        console.log('I got an error from server');
        return $q.reject(rejection);
      }
    };
  });

});

Обратите внимание, что вы должны вернуть config или response, чтобы заставить его работать.

В случае rejection вам нужно вернуть отложенное отклонение, чтобы $http.get().error() продолжал работать после перехвата.