当$ http返回某些状态时定义默认操作

时间:2016-06-30 08:59:45

标签: angularjs angular-http

是否可以在我的应用中为$http设置默认操作?

想法是,如果控制器中的任何$http电话或我的应用程序的服务将返回405,我可以更改为状态'登录'

这样的事情(当然这根本不起作用,但我想这表明了这个想法)

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

4 个答案:

答案 0 :(得分:4)

您可以使用拦截器来实现此目的。

// 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

答案 1 :(得分:0)

你应该这样做:

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

答案 2 :(得分: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) {

        });

答案 3 :(得分: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');

        ...
    });