angularjs – 如何将url传递给ui-router的$stateChangeStart

前端之家收集整理的这篇文章主要介绍了angularjs – 如何将url传递给ui-router的$stateChangeStart前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果用户登录,我使用以下内容将路由重定向登录

angular.module('app').run(['$rootScope','$location','$state','AuthService',function($rootScope,$location,$state,AuthService) {

    /* redirect to login if not logged in */
    $rootScope.$on( '$stateChangeStart',function(e,toState,toParams,fromState,fromParams) {
            if(toState.name === "login"){
               return; // already going to login 
            }

            if(!AuthService.user) {
                e.preventDefault(); 
                $state.go('login'); 
            }
        });
}]);

如何将URL从“已阻止”状态传递到登录状态,以便我可以在登录后继续导航到该状态?

示例:用户单击myapp.com/#/path/to/data的链接 – >重定向到myapp.com/#/login – >用户登录 – >用户路由到myapp.com/#/path/to/data

我基本上需要将/ path / to / data发送到我的登录控制器,以便我可以处理它.我似乎无法在$stateChangeStart监听器中的任何状态或参数变量中找到’/ path / to / data’.

解决方法

$state服务有一个 href方法,可以根据状态及其参数创建一个URL.由于这些是提供给状态更改侦听器的,因此您可以创建一个URL,然后将其作为参数传递给登录状态.

$rootScope.$on('$stateChangeStart',fromParams) {
            if (toState.name === "login") {
                return; // already going to login
            }

            if (!AuthService.user) {
                e.preventDefault();

                var redirectUrl = $state.href(toState.name,toParams);

                $state.go('login',{
                    redirect: redirectUrl
                });
            }
        });

您需要在登录状态中添加重定向参数,以便可以使用它.

猜你在找的Angularjs相关文章