我正在尝试从服务中设置角度运行功能的值。 第一次加载时,该值未在会话存储中设置。 当我第二次重新加载网址时,该值将可用。请帮我解决这个问题
appName.run(function($rootScope, $state, $window, testSerivces) {
$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams) {
if ($window.sessionStorage.getItem('loginID') === null) {
testSerivces.login().then(function(response) {
$window.sessionStorage.setItem('loginID', response.data.profile.id);
}, function(e) {
console.log(e);
}).finally(function() {
});
}
});
});
答案 0 :(得分:1)
您看到此行为是因为您在调用async
时发送testSerivces.login()
请求,同时State Change
将继续发送。即testSerivces.login()
发生在后台,而State Change
正在继续它的传播。因此,您必须停止该事件并等待服务解决然后继续。将代码更改为
appName.run(function($rootScope, $state, $window, testSerivces) {
$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams) {
if ($window.sessionStorage.getItem('loginID') === null) {
event.preventDefault(); // Prevent Propgation
testSerivces.login().then(function(response) {
$window.sessionStorage.setItem('loginID', response.data.profile.id);
$state.go(toState, toParams); //Start Propogation Again
}, function(e) {
console.log(e);
}).finally(function() {
});
}
});
});
会做的伎俩。希望这会有所帮助。