Я пытаюсь отправить дополнительный заголовок в запросе XHR (инициализации с $ ресурса) Следуя за мой конфигНе установив дополнительный параметр заголовка в запросе angularjs XHR без Mannual обновления
var app = angular.module('app',['angularMoment']).
run(function ($rootScope,$location,$route, $timeout, $http) {
var token = localStorage.getItem("userToken");
$http.defaults.headers.common.token = token;
}
Я меняю хэш Params (например, после процесса входа в систему) для навигации по приложению. Поэтому, когда я отправляю любой запрос XHR после процесса входа в систему (перезагрузка manhual mannual), он отправляет токен (заголовок запроса) как NULL. Но когда я перезагружаю свою страницу вручную, она работает нормально (т. Е. Отправляет токен в виде заголовка). Также я пробовал с $route.reload()
, но он не работает.
Просьба предложить, как я могу избавиться от этой проблемы.
Благодаря
EDIT:
После попытки с follwing кодом:
app.factory('tokenInterceptorService', ['$q', '$location', function ($q, $location) {
var tokenInterceptor = {};
var request = function (config) {
config.headers = config.headers || {};
var token = localStorage.getItem("userToken");
config.headers.token = token;
return config;
}
// if response errors with 401 redirect to lgoin
var response = function (rejection) {
if (rejection.status === 401) {
$location.path('/');
}
return $q.reject(rejection);
}
tokenInterceptor.request = request;
tokenInterceptor.response = response;
return tokenInterceptor;
}]);
app.config(function ($httpProvider) {
$httpProvider.interceptors.push('tokenInterceptorService');
});
app.run(function ($rootScope, $location,$route, $timeout, $http) {
$rootScope.config = {};
$rootScope.config.app_url = $location.url();
$rootScope.config.app_path = $location.path();
$rootScope.layout = {};
$rootScope.layout.loading = false;
$rootScope.$on('$routeChangeStart', function() {
//need to validate
console.log($rootScope.isValidated + "app");
//show loading
$timeout(function(){
$rootScope.layout.loading = true;
});
});
$rootScope.$on('$routeChangeSuccess', function() {
//hide loading
$timeout(function(){
$rootScope.layout.loading = false;
}, 200);
});
$rootScope.$on('$routeChangeError', function() {
alert('Something went wrong. Please refresh.');
$rootScope.layout.loading = false;
});
})
Это остановить rendring мнения в применении с ".run" и захвата в $rootScope.$on('$routeChangeError',
и давая ошибка Ошибка: [$ rootScope: inprog] $ digest уже выполняется.
Проблема с '$ digest уже в процессе 'кажется отдельной проблемой с перехватчиками' $ http'. Можете ли вы попробовать использовать перехватчик без кода '.run()? – arunjitsingh