如何从ngResource $ resource查询中获取错误响应

时间:2016-07-21 16:08:30

标签: angularjs angular-services ngresource angular-controller

在我的第一个角度项目工作中,我遇到了这个问题而无法在我的一个控制器中看到使用该服务的值。

另外,characterService.query()很好,只是errorMessage的值没有显示

感谢您的帮助

服务:

angular.module('characterResource',['ngResource'])

.factory('characterService',['$resource',function($resource){
var self = this;

self.errorMessage = false;

return $resource('http://gateway.marvel.com:80/v1/public/characters?limit=90&apikey=APIKEY',null, {

    query: {
      method: 'GET',
      isArray: false,
      transformResponse: function(data) {
        return angular.fromJson(data).data;
      },
      interceptor:{
        responseError:function(error){
            console.log(error);
            self.errorMessage = true;
        }
      }
    }

});

}]);

控制器:

angular.module('CharactersCtrl', []).controller('CharactersController',['characterService', function(characterService) {
var self = this;
self.sortType     = 'name'; // set the default sort type
self.sortReverse  = false;  // set the default sort order
//self.search  = ' ';     // set the default search/filter term

self.errorMessage = characterService.errorMessage;
console.log(characterService.errorMessage);

self.init = function(){
    self.getCharacters();
}

self.getCharacters = function(){
    self.characters = characterService.query();
}

self.init();

}]);

1 个答案:

答案 0 :(得分:0)

无需使用错误拦截器。要从ngResource查询中获取错误响应,请在其.catch属性上使用$promise方法。

self.getCharacters = function(){
    self.characters = characterService.query();
    self.characters.$promise.catch( function(errorResponse) {
        console.log(errorResponse);
        self.errorMessage = true;
    });     
}

来自文档:

  

资源实例和集合具有以下附加属性:

     
      
  • $promise:创建此实例或集合的原始服务器交互的承诺。
  •   
     

成功时,使用相同的资源实例或集合对象解析promise,并使用来自服务器的数据进行更新。这使得在resolve section of $routeProvider.when()中使用它很容易推迟视图渲染,直到资源被加载。

     

失败时,使用http response对象拒绝承诺,但没有资源属性。

- AngularJS $resource Service API Reference