angularjs - 更改 URL 会破坏路由阻止

标签 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;
        }
    });
}]);

网址如下:https://localhost/app/#/account/security/true 正如我提到的,我可以刷新页面或更改网址,例如: https://localhost/app/#/accounthttps://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/

相关文章:

javascript - 使用 Angular 创建动态多个表

javascript - 检查用户电子邮件和密码

javascript - Angular ui-router 中使用 href 的路由问题

javascript - UI Router - 在状态之间转换时记住滚动位置

javascript - 如何在同一状态下的参数化 URL 之间导航?

javascript - ng-repeat 内的 ng-form 和 ng-repeat 外的提交按钮

javascript - angularjs 指令丢失数组格式过滤器

angularjs - UI-Router - 更改 $state 而不重新渲染/重新加载页面

javascript - 如何在使用 ng-options 时将所选选项的文本分配给另一个模型?

javascript - 如何在 nginx 后面设置 Phantomjs