1

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

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

}]); 
+0

创建plunker复制的问题,添加您的视图代码也 – Sajeetharan

回答

0

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

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

从文档:

资源实例和收藏有这些附加属性:

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

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

如果失败,承诺将被拒绝,并且http response对象没有资源属性。

- AngularJS $resource Service API Reference

+0

非常感谢! @georgeawg – jordan