【问题标题】:How to access previous state in ui-router $transitions?如何访问 ui-router $transitions 中的先前状态?
【发布时间】:2017-04-04 19:06:45
【问题描述】:

这是我的 .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 并取消转换,从而使用户处于与他相同的状态。

当用户在首次加载时尝试访问受限页面并取消登录时,问题就开始了,因为没有先前的状态并且整个页面都是空白的。

如果有先前的状态,有没有办法取消转换,如果没有,则重定向到家?我需要访问以前的状态并查看它是否存在。

【问题讨论】:

    标签: javascript angularjs angular-ui-router


    【解决方案1】:

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

    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');
            }
        });
    });
    

    请注意,您也可以在这里使用stateParams 更好地用作$transition$ 参数:

    trans.params().PARAM-NAME
    

    【讨论】:

      猜你喜欢
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多