Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 尝试更改路由时页面处于无限循环中_Angularjs - Fatal编程技术网

Angularjs 尝试更改路由时页面处于无限循环中

Angularjs 尝试更改路由时页面处于无限循环中,angularjs,Angularjs,每当我在用户存储器中拾取登录令牌时,我都会尝试更改我的路由,因此用户会登录到配置文件页面或登录页面。但由于某些原因,当我访问/或登录时,页面会以无限循环结束。我怎么修理它 controller.js index.html 当您必须处理动态路由时,直接使用$window.location不是最佳选择 我建议使用 使用UI路由器,您可以注册一个功能,该功能将在导航的某些事件后触发 考虑注册一个函数,该函数将在您尝试进入某个状态或路由时执行 在本例中,我定义了一个LoginHook,用于检查是否应该将

每当我在用户存储器中拾取登录令牌时,我都会尝试更改我的路由,因此用户会登录到配置文件页面或登录页面。但由于某些原因,当我访问/或登录时,页面会以无限循环结束。我怎么修理它

controller.js

index.html

当您必须处理动态路由时,直接使用$window.location不是最佳选择

我建议使用

使用UI路由器,您可以注册一个功能,该功能将在导航的某些事件后触发

考虑注册一个函数,该函数将在您尝试进入某个状态或路由时执行

在本例中,我定义了一个LoginHook,用于检查是否应该将每个转换重定向到/login,或者是否可以允许

LoginHook.js

LoginHook.$inject = ['$transitions','$state'];
export function LoginHook ($transitions, $state) {
    //
    $transitions.onEnter({/*Matching every destination*/}, $transition => {
        //
        if($transition.to().name !== 'login') {
            // 
            if( user.allowed ) { // Replace this with your auth check 
                //
                return true; // Allowing access
            } else {
                //
                redirectToLogin(); // Redirecting to "login" 
            }
        } else {
            // Avoiding auth checking if i'm going to "login"
            return true;
        }
    })
    //
    function redirectToLogin() {
        //
        $state.go('login');
    }
}
编辑答案

正如我在你的箱子里看到的,你应该先处理当前的导航,然后再用另一个导航取代它

试试这个:

resolve: {
    data: function ($location, $window, $q) {
        if(!localStorage.adsomaToken && !localStorage.adsomaUserId && 
           !localStorage.adsomaAccountType) {
           //
           $q.reject('NOT ALLOWED');
           $location.path('/login');
        } else {
           $q.resolve('ALLOWED');
        }
    }
}

是否可以使用$routeProvider执行此操作?这就是我目前正在做的:
LoginHook.$inject = ['$transitions','$state'];
export function LoginHook ($transitions, $state) {
    //
    $transitions.onEnter({/*Matching every destination*/}, $transition => {
        //
        if($transition.to().name !== 'login') {
            // 
            if( user.allowed ) { // Replace this with your auth check 
                //
                return true; // Allowing access
            } else {
                //
                redirectToLogin(); // Redirecting to "login" 
            }
        } else {
            // Avoiding auth checking if i'm going to "login"
            return true;
        }
    })
    //
    function redirectToLogin() {
        //
        $state.go('login');
    }
}
resolve: {
    data: function ($location, $window, $q) {
        if(!localStorage.adsomaToken && !localStorage.adsomaUserId && 
           !localStorage.adsomaAccountType) {
           //
           $q.reject('NOT ALLOWED');
           $location.path('/login');
        } else {
           $q.resolve('ALLOWED');
        }
    }
}