ui-router $ transitions.transitionOptions set reload true

时间:2017-04-11 11:35:31

标签: angularjs angular-ui-router transitions

我需要找到一种方法来完全重新加载路线。

在我的情况下: 父状态具有子状态-1和子状态状态-2 在url之后,parent-state / child-state-1将触发父状态的执行,进行所需的api调用,child-state-1从中获取一些信息。 但是如果我从州 - 孩子1开始到州 - 孩子2, 将保留父状态,并且不会再次进行api调用,因此state-child-2将有错误的信息

这种依赖是为了避免重复的api调用以及允许模板继承。

我发现添加 ui-sref-opts =“{reload:true}”会重新加载我的状态,这是完美的,但如果我使用后退/前进按钮在我的浏览器/鼠标上保留了父状态,这搞砸了东西。

然后我搜索了一些,发现this是我的解决方案,在转换选项中添加了reload true。

我发现mihgt必须放在run block中,因为我会进行auth检查。因此,如果这改变了状态转换,我就可以强制重新加载。

我的运行块是:

run.$inject = ['$uiRouter', '$state', '$cookies', '$rootScope', '$http', '$transitions', '$trace'];

    function run($uiRouter, $state, $cookies, $rootScope, $http, $transitions, $trace) {
        var pluginInstance = $uiRouter.plugin(Visualizer);

        $trace.enable('TRANSITION');

        // keep user logged in after page refresh
        $rootScope.globals = $cookies.getObject('globals') || {};

        if ($rootScope.globals.currentUser) {
            $http.defaults.headers.common['Authorization'] = $rootScope.globals.currentUser.token_type + ' ' + $rootScope.globals.currentUser.access_token;
        }

        //Redirect to login if not authenticated before any transition
        $transitions.onStart({
            to: function(state) {
                // if state name is login or register
                if (state.name === 'login' || state.name === 'register'){
                    // break out of the redirect because auth not needed
                    return false;
                } else{
                    //continue to redirect
                    return true;
                }
            }
        }, function(trans) {
            var loggedIn = $rootScope.globals.currentUser;
            if (!loggedIn) {
                return trans.router.stateService.transitionTo('login');
            }
        });
    }

我还没有找到合适的方法,所以我要求你的帮助。

我的猜测是,我需要添加以下内容: $ state.transitionTo($ staste.current.name,{$ stateParams},{reload:true}) 因为我不需要覆盖状态参数。

0 个答案:

没有答案