我想要实现的目标
我想在$ http拦截器中获取当前状态的数据值。我已经创建了拦截器。
问题
我不知道如何在我的拦截器中捕获$ state.current.data。我尝试使用$ injector.get($ state),但是无法读取对象的属性。
angular.module('mymodule').factory 'HttpInterceptor', [
'$location', '$injector'
($location, $injector) ->
request: (config) ->
# Do something when sending the request
console.log(config.headers.hasOwnProperty('Authorization'))
if config.headers.hasOwnProperty('Authorization') == false
$location.url("/login")
config
答案 0 :(得分:0)
我不熟悉$ state行为,但你可以创建一个服务来存储状态的当前数据并将其放入注入器中。
答案 1 :(得分:0)
我或许可以告诉你如何通过运行块来实现它。
app.run(function (StateInterceptor, FPSSO, HTTPResponseCode, $state, SessionManager, notifications, Utils, $timeout) {
StateInterceptor.startService();
var httpSecurityInterceptor = function(response, deferred){
var propagatePromise = true;
switch(response.status){
case HTTPResponseCode.UNAUTHORIZED:
SessionManager.Logout();
notifications.showErrorMessage("Your session has expired. Please sign in again.", "Error");
$state.go('Logout', {isLogout: true, returnUrl: $state.current.name});
propagatePromise = false;
break;
default:
var res = Utils.ExtractResponse(response);
res.status = response.status;
deferred.reject(res);
}
return propagatePromise;
}
FPSSO.API.setErrorInterceptor(httpSecurityInterceptor);
你可以看到在switch语句的Unauthorized情况下,我可以访问$ state.current并将我的应用程序路由到'Logout'。这是一个部署在生产中的代码,所以我很确定它有效。
尝试实现类似的目标。
答案 2 :(得分:0)
我可以使用拦截器中的以下代码正确注入$ state:
$timeout(function () {
$state = $injector.get('$state');
});