2016-06-30 13 views
1

Ist es möglich, in meiner App eine Standardaktion für $http festzulegen?

Die Idee wäre, dass, wenn ein $http Anruf in einem Controller oder Dienst meiner app 405 zurückkehren würde, ich in dem Zustand ‚login‘

So etwas wie dies (natürlich nicht funktioniert das überhaupt ändern könnte , aber ich denke, dass die Idee zeigt)

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

Antwort

4

Sie Abfangjäger dies erreichen können.

// 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 
} 
}; 
}); 

Lesen Sie mehr über sie here

+0

Danke! Genau das habe ich gesucht. Es ist sogar verdammt glatt mit der anonymen Fabrik. –

0

Sie sollten etwas tun:

$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 
    } 
}); 
+0

Dies ist keine optimale Lösung für jeden gemacht API-Anfrage, Sie müssen den Fehlerteil mit der Prüfung auf den Antwortcode schreiben. –

+0

Ja, du hast Recht. Selbst wenn wir einen globalen errorCallback definieren und an $ http übergeben, sollten wir diese globale Funktion jedes Mal übergeben. Ich wusste nichts von Abfangjägern, aber ich werde sie ansehen. Es hört sich toll an. Ich mag deine Antwort. – r3npi2

0

Im Folgenden Code könnte Ihnen helfen:

 $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

Verwendung 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'); 

     ... 
    });