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