XHR リクエストで追加のヘッダーを送信しようとしています ($resource で初期化)。以下は私の構成です。
var app = angular.module('app',['angularMoment']).
run(function ($rootScope,$location,$route, $timeout, $http) {
var token = localStorage.getItem("userToken");
$http.defaults.headers.common.token = token;
}
アプリ内をナビゲートするためにハッシュ パラメータを変更しています (ログイン プロセス後など)。そのため、ログイン プロセス後に (手動リロードなしで) XHR リクエストを送信すると、トークン(リクエスト ヘッダー) がNULLとして送信されます。しかし、ページを手動でリロードすると、正常に機能します (つまり、トークンをヘッダーとして送信します)。また、試してみまし$route.reload()
たが、機能しません。
この問題を解決する方法を教えてください。
ありがとう
編集 :
次のコードで試した後:
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;
});
})
「 .run 」を使用してアプリケーション内のビューをレンダリングするのを停止し、トラップし$rootScope.$on('$routeChangeError',
てエラーError: [$rootScope:inprog] $digest already in progress を発生させます。