我有一个要求,如果是第一次登录用户,他们必须留在设置页面才能重置密码,以阻止路由在做其他事情之前(或转到其他页面),代码现在 99% 正常工作,我可以更改 url/
刷新页面,它工作正常,但只有一个问题。这是代码:
.state('accountsetting.security', {
url: '/security/{isFirstTimeUser}',
templateUrl: 'settings/security/security.html',
params: {'isFirstTimeUser': null}
}) // this is where I define the route
// in the run block
.run(['$state','$rootScope',function($state,$rootScope) {
// var isFirstTimeUser = false;
// userinforservice.getUserInformation().then(function(data){
// isFirstTimeUser = data.isFirstTimeUser;
// });
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
if(fromState.name!=="undefined" && toState.name=='firsttimeuser'){
$rootScope.isFirstTimeUser=true;
$state.go('accountsetting.security',{isFirstTimeUser:true});
event.preventDefault();
}else if((toParams.isFirstTimeUser || fromParams.isFirstTimeUser) && toState.name !='accountsetting.security'){
$state.go('accountsetting.security',{isFirstTimeUser:true});
event.preventDefault();
}
else{
return;
}
});
}]);
网址如下:https://localhost/app/#/account/security/true
正如我提到的,我可以刷新页面或更改网址,例如: https://localhost/app/#/account或https://localhost/app/#
它们都工作正常,但是当我像这样更改 url 时:
https://localhost/app/它会将我带到主页。我检查控制台,在statechangestart
中,我丢失了isFirstTimeUser
,它是undefind
。有什么想法吗?
提前致谢。
最佳答案
当您转到根的 url 而不是状态 url(即 #(hash) url)时,您会丢失 Angular 状态。根 url 会重新加载页面,其中您会丢失所有 javascript 变量的内存,因为它们都是客户端。因此该变量是未定义的。
状态更改发生在页面加载的单个实例中,URL 更改会给您一种页面加载正在发生的错觉
关于angularjs - 更改 URL 会破坏路由阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38274062/