更改URL中断路由阻止

lin*_*xie 3 angularjs angular-ui-router

我有一个要求,以防止路由如果是第一次登录的用户,他们必须留在设置页面,以重置密码做别的事情之前(或去其他页面),代码为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;
        }
    });
}]);
Run Code Online (Sandbox Code Playgroud)

网址如下:https:// localhost/app /#/ account/security/true 正如我所提到的,我可以刷新页面或更改网址,如:https:// localhost/app /#/ accounthttps://localhost/app /# 他们都工作正常,但当我更改这样的网址时: https:// localhost/app /它将带我到主页.我检查控制台,在statechangestart,我输了isFirstTimeUser,它是undefind.有什么想法吗?提前致谢.

Shi*_*eph 5

当你转到根的url而不是状态url(即)#(hash)url时,你会失去角度状态.根URL重新加载页面,其中您丢失了所有javascript变量的内存,因为它们都是客户端.因此变量是未定义的.

状态更改发生在单个页面加载实例中,网址更改会给您一种错觉,就像发生页面加载一样