2015-10-13 46 views
1

我正在設置一個全局響應攔截器來處理重定向錯誤。問題是該頁面沒有使用ErrorCtrl,也沒有反映該位置已被更改的地址欄。這裏的工廠:Angular Response Interceptor不重定向

famaApp.factory('responseObserver', function responseObserver($q, $location) { 
    return { 
     'responseError': function(errorResponse) { 
      $location.path('/error/' + errorResponse.status); 
      return $q.reject(errorResponse); 
     } 
    }; 
}); 

其正被推入$ httpProvider的攔截器的app.config:

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

我檢查的路徑在其中被稱爲一個具體服務如下:

AuthenticationService.authenticate($scope.credentials, function(success) { 
    if (success) { 
     ... 
    } else { 
     console.log($location.url()); 
     ... 
    } 
}); 

而$ location.url()是正確的,/ error/502。任何想法我在這裏做錯了嗎?

編輯:

我,因爲我更新的代碼已經和它仍然無法正常工作。這是我的新配置:

app.config(['$routeProvider', '$httpProvider', 
     function($routeProvider, $httpProvider) { 
    $httpProvider.interceptors.push(function ($q, $location) { 
     return { 
      responseError: function (response) { 
       $location.path('/error/' + response.status); 
       return $q.reject(response); 
      } 
     }; 
    }); 
    ... 
}]); 

不幸的是,問題依然存在。

+0

爲什麼你的服務使用回調? – cgTag

回答

0

刪除

return $q.reject(response); 

解決了這個問題。

2

嘗試直接在應用程序模塊配置中在攔截器中添加「responseError」。這個對我有用!

var app = angular.module('yourAppName', []); 
app.config(function ($httpProvider) { 
    $httpProvider.interceptors.push(function ($q, $location) { 
     return { 
      responseError: function (response) { 
       $location.path('/error/' + response.status); 
       return $q.reject(response); 
      } 
     } 
    } 
}); 

是不必要的驗證響應。

AuthenticationService.authenticate($scope.credentials, function(success) { 
    if (success) { 
     ... 
    } else { 
     console.log($location.url()); 
     ... 
    } 
}); 

第三個參數是回調錯誤。當響應被「$ q.reject」拒絕時執行。

AuthenticationService.authenticate($scope.credentials, function (response) { 
    /** 
    * Success response 
    */ 
}, function (response) { 
    /** 
    * Error response 
    */ 
}); 
+0

我更新了我的問題 - 我做了你的建議,並得到了同樣的結果。 – cscan