web-dev-qa-db-ja.com

AngularJSで$ resourceメソッドのコールバックを追加する方法

ユーザーがデータを更新/作成した後にエラー/成功メッセージを表示する必要があるのは一般的なケースかもしれませんが、AngularJSでどのように実装できますか?
コールバックを追加したいのですが、解決策が見つかりませんでした。 $ http.post()。success()。error()を使用することはできますが、より高度なAPIである$ resourceを使用して実行できるかどうかは疑問です。
または、ディレクティブを作成するか、$ watch()を使用する必要がありますか?
事前にご協力いただきありがとうございます。

30
Edward

Resourceクラスからのアクションは、下位レベル$ httpサービスと同様に成功およびエラーコールバックを渡すことができます

ドキュメントから

  • HTTP GET「クラス」アクション:Resource.action([パラメーター]、[成功]、[エラー])
  • gET以外の「クラス」アクション:Resource.action([パラメーター]、postData、[成功]、[エラー])

非取得アクションには、$というプレフィックスが付きます。

だからあなたはこれを行うことができます

User.get({userId:123}, function(u, getResponseHeaders){
  // this is get's success callback
  u.abc = true;
  u.$save(function(u, putResponseHeaders) {
    // This is $save's success callback, invoke notification from here
  });
});

編集:ここに 以前のプランカーの別の例 があります。既存のjsonファイルを要求するため、get要求は失敗します。エラーコールバックが実行されます。

someResource.get(function(data){
    console.log('success, got data: ', data);       
}, function(err){
    alert('request failed');
});
51
jaime

最新のAngularJSバージョンでは、$interceptorsの一部である $httpProvider を見ることができます。

次に、送信する前または応答後にリクエストをすべてインターセプトできます。

angular.module('app').config(function($httpProvider){

  $httpProvider.interceptors.Push(function($q) {
    return {
      'request': function(config) {
        console.log('I will send a request to the server');
        return config; 
      },

      'response': function(response) {
        // called if HTTP CODE = 2xx 
        console.log('I got a sucessfull response from server'); 
        return response;
      }

      'responseError': function(rejection) {
        // called if HTTP CODE != 2xx
        console.log('I got an error from server');
        return $q.reject(rejection);
      }
    };
  });

});

configまたはresponseを返さなければ動作しません。

rejectionの場合、インターセプト後も$http.get().error()が機能するように、遅延拒否を返す必要があります。

5
M'sieur Toph'