2016-06-30 5 views
1

私のアプリで$httpのデフォルトアクションを設定することはできますか?

アイデアは(もちろんこれはまったく動作しません任意の$httpコントローラで呼び出し、または私のアプリのサービスは、405を返すならば、私はこのような

何かのログイン」状態に変更される可能性があることだろうあなたはこれを達成するためにインターセプタを使用することができます

$http({ 
    method: 'GET', 
    url: '/someUrl' 
}).then(function successCallback(response) { 
    //Do whatever you want on success 
}, function errorCallback(response) { 
    if(response.status == 405) { 
    //Go to login 
    } 
}); 

答えて

4

:が、私はあなたがこのような何かを行う必要があります

angular.module('app',[]).config(function($http){ 
    $http.error(function(error,state){ 
    if (state===405){ 
     do stuff 
    } 
); 
+0

ありがとう!それはまさに私が探していたものです。 それは匿名の工場でさえ気になりません。 –

0

)それは考えを示し思います。

// register the interceptor as a service 
$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { 
    return { 
// optional method 
'request': function(config) { 
    // do something on success 
    return config; 
}, 

// optional method 
'requestError': function(rejection) { 
    // do something on error 
    if (canRecover(rejection)) { 
    return responseOrNewPromise 
    } 
    return $q.reject(rejection); 
}, 



// optional method 
'response': function(response) { 
    // do something on success 
    return response; 
}, 

// optional method 
'responseError': function(rejection) { 
    // do something on error 
    if (canRecover(rejection)) { 
    return responseOrNewPromise 
    } 
    return $q.reject(rejection); 
} 
}; 
}); 

$httpProvider.interceptors.push('myHttpInterceptor'); 


// alternatively, register the interceptor via an anonymous factory 
$httpProvider.interceptors.push(function($q, dependency1, dependency2) { 
return { 
'request': function(config) { 
    // same as above 
}, 

'response': function(response) { 
    // same as above 
} 
}; 
}); 

それはコードの下here

+0

これが行われた各APIリクエスト用として最適な解決策ではありません、応答コードのチェックを含むエラー部分を記述する必要があります。 –

+0

はい、そうです。グローバルなerrorCallbackを定義して$ httpに渡しても、毎回このグローバル関数を渡す必要があります。私は傍受者については知らなかったが、私は彼らに見張っている。いいな。私はあなたの答えが好きです。 – r3npi2

0

はあなたを助けるかもしれない詳細についてはこちらをご覧ください:

 $http.get("url") 
     .success(function (data, status, headers, config) { 
      $scope.content = data; 
      if (data == '405') { 
      $state.go('login', {id: the_necesarry_id});     

      } 
      else {window.alert(' ');} 
     }) 
     .error(function (data, status, headers, config) { 

     }); 
0

使用angularjs Interceptors

// interceptors.js 

    .factory('httpInterceptor', function ($q, $injector) { 
     return { 
     'requestError': function(rejection) { 
       // do something on error 
       if(rejection.status === 405){ 
        $injector.get('$state').transitionTo('login');      
       } 
       return $q.reject(rejection); 
      }, 
     'responseError': function(rejection) { 
       // do something on error 
       if(rejection.status === 405){ 
        $injector.get('$state').transitionTo('login');      
       } 
       return $q.reject(rejection); 
      } 
     }; 
    }); 


    // app.js 

    app.config(function ($httpProvider, $interpolateProvider, $routeProvider) { 
     $httpProvider.interceptors.push('httpInterceptor'); 

     ... 
    }); 
関連する問題