Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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
Javascript 如何访问ui路由器$transitions中的以前状态?_Javascript_Angularjs_Angular Ui Router - Fatal编程技术网

Javascript 如何访问ui路由器$transitions中的以前状态?

Javascript 如何访问ui路由器$transitions中的以前状态?,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,这是我的.run函数: .run(function ($transitions, UserService) { $transitions.onStart({ to: function(state) { return state.data != null && state.data.requireLogin === true && UserService.getUser().isLogged !== true; }},function

这是我的.run函数:

.run(function ($transitions, UserService) {
    $transitions.onStart({ to: function(state) {
        return state.data != null && state.data.requireLogin === true && UserService.getUser().isLogged !== true;
    }},function(trans){
        var AuthService = trans.injector().get('AuthService');
        var $q = trans.injector().get('$q');
        var $state = trans.injector().get('$state');
        var defer = $q.defer();
        AuthService.login().then(function (status){
            if(status === 'login'){
                defer.resolve(true);
            }else if (status === 'register'){
                defer.resolve($state.target('map.register'));
            }
        }, function (msg){
            //  Here is part that I am asking for
            defer.resolve(false);
        });

        return defer.promise;   
    });
});
基本上,如果转换到需要登录且用户未登录的状态,则使用
transitionHookFn
。在那里,我使用
AuthService.login()
并返回状态承诺。如果
AuthService.login()
失败(用户取消),promise将返回false并取消转换,从而使用户保持与以前相同的状态

当用户在第一次加载时尝试访问受限页面并取消登录时,问题开始出现,因为没有以前的状态,整个页面只是空白


如果有以前的状态,是否有方法取消转换,如果没有,则重定向到主页?我需要访问上一个状态并查看它是否存在。

要重定向到您可以使用的主页

app.config(function($urlRouterProvider){
    $urlRouterProvider.otherwise('YOUR-HOME-STATE');
});
你也可以使用

app.run(function($transitions, SOME-SERVICE) {
    $transitions.onSuccess({ to: 'SOME-STATE' }, function(trans) {
        //Here you can call your service and based on conditions 
        //you can make transition to previous state by calling its name
        //or to your default state
        if(SOME-CONDITION){
            return trans.router.stateService.go('PREVIOUS-STATE');
        } else {
            return trans.router.stateService.go('DEFAULT-STATE');
        }
    });
});
请注意,您也可以在此处使用
stateparms
作为
$transition$
参数,使用方法如下:

trans.params().PARAM-NAME