【问题标题】:How to Get Error Response from ngResource $resource query如何从 ngResource $resource 查询中获取错误响应
【发布时间】:2016-07-21 16:08:30
【问题描述】:

您好,我正在处理我的第一个 Angular 项目,我遇到了这个问题,因为我无法从我的一个控制器中使用的服务中看到值。

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();

}]);

【问题讨论】:

  • 创建一个 plunker 来复制问题,同时添加您的视图代码

标签: angularjs angular-services ngresource angular-controller


【解决方案1】:

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

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

来自文档:

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

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

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

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

--AngularJS $resource Service API Reference

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 2015-12-03
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 2017-09-16
    • 2021-09-06
    相关资源
    最近更新 更多