2013-12-14 6 views
95

私は自分のAPIにリクエストを行い、AngularJS $リソースモジュールを使用しています。それは$ httpとは違うので、私はエラーをどのように処理するのか分かりません。

マイサービス:

var appServices = angular.module('app.services', ['ngResource']); 
appServices.factory('Category', ['$resource', 
    function($resource){ 
     return $resource('/apicategoryerr/?format=:format', {}, { 
      query: { 
       method: 'GET', 
       params: { format: 'json'}, 
       isArray: true, 

      } 
     }); 
    }]); 

マイコントローラー:

... 
Category.query(function(data) { 
       console.log(data); 
      }); 
... 

私はこのような何かをしたいか、私のAPIが動作しない場合..私はエラーを処理する方法を知りません。..

Category.query().success(function() { 
       console.log('success'); 
      }).error(function() { 
       console.log('error'); 
      }); 

答えて

176

エラーハンドラを第2のパラメータとしてqueryに渡すことができます。

Category.query(function(data) {}, function() {}); 

EDIT:

物事が少し明確にするために、いくつかの例:

var Resource = $resource('/restapi/resource'); 

Resource.query(function(data) { 
    // success handler 
}, function(error) { 
    // error handler 
}); 

Resource.query({ 
    'query': 'thequery' 
},function(data) { 
    // success handler 
}, function(error) { 
    // error handler 
}); 

Resource.query().$promise.then(function(data) { 
    // success handler 
}, function(error) { 
    // error handler 
}); 

Resource.query({ 
    'query': 'thequery' 
}).$promise.then(function(data) { 
    // success handler 
}, function(error) { 
    // error handler 
}); 
+2

ドキュメントでは、3番目のパラメータはエラーコールバックです。 "Resource.action([parameters]、[success]、[error])" http://docs.angularjs.org/api/ngResource.$resource – Marcel

+0

はい、設定オブジェクトを渡すとします。 –

+4

このリソースのすべての使用に共通のデフォルトのエラーハンドラを定義する方法はありますか?(例:「サーバによって許可されていないリソース」? –

67

あなたはinterceptorオブジェクトを追加することにより、リソースの作成段階でエラーハンドラを定義することができますメソッドの説明で、エラー関数にリンクされたresponseErrorプロパティを使用します。

function resourceErrorHandler(response) { ... } 

$resource('/path/:param/', {} , 
{ 
     'get': {method:'GET', 
        interceptor : {responseError : resourceErrorHandler}}, 
     'save': {method:'POST'}, 
     'query': {method:'GET', isArray:true, 
        interceptor : {responseError : resourceErrorHandler}}, 
     'remove': {method:'DELETE'}, 
     'delete': {method:'DELETE'} 
}; 

ここで、resourceErrorHandlerは、getまたはqueryメソッドの各エラーで呼び出される関数です。尋ねられた問題については、getメソッドだけが必要です。もちろん、あなたはそれをどんな行動にも適用することができます。

他のインターセプタresponseは、$ resourceに対して通常の応答をキャッチするために存在します。

{'get': {method:'GET', interceptor : {response : resourceResponseHandler}}, 

インターセプタは$httpモジュールの一部である、あなたはread about them in their docsを進めることができます。ここで

1

は私のng.resource

resolve: { 
    detail: function (myService, $stateParams) { 
     return myService.getEventDetail({ id: $stateParams.id }).$promise.then(data => data, error => false); 
    } 
} 

に(私は活字体を使用して)新しいES6の一例であり、その後、私のコントローラでは、コントローラに注入「詳細は」(良い)のデータに解決されますか404の表示を処理するエラーの場合はfalseです。

関連する問題