Что эквивалентно следующему в $routeChangeStart в $transitions

Я создаю приложение контроля доступа на основе разрешений в angularjs. Я хочу параметр в $ transitions, который будет эквивалентен параметру 'next' в $routeChangeStart.

  function ($rootScope, $state, $transitions, LoginService) {
        console.log('------------------in app.js run');
        $state.go('login');
        $transitions.onStart({}, function ($transitions) {
                var newToState = $transitions.$to();
                if(checkPermissionForView(// param similar to next))
        });

    }

У меня определена служба, которая проверяет, есть ли у вошедшего в систему пользователя разрешение на доступ к представлению

  checkPermissionForView : function (view) {
                if (!view.requiresAuthentication) {
                    return true;
                }

                return userHasPermissionForView(view);
            }

  userHasPermissionForView : function(view){
                if(!isLoggedIn()){
                    return false;
                }
            }

  isLoggedIn : function () {
                var user = JSON.parse(localStorage.getItem("user"));
                console.log(user);
                return user != null;
            }

Как видите, я хочу передать "следующую" информацию сервису. Приводит ли $ transitions. $ To() к тому же результату, что и next в $routeChangeStart('next')? Я новичок в этом. ТИА

1 ответ

Решение

Да использовать Transition.to() чтобы получить состояние, которое будет активировано.

См. Документацию по классу Transition для получения более подробной информации.

function ($rootScope, $state, $transitions, LoginService) {
        console.log('------------------in app.js run');
        $state.go('login');
        $transitions.onStart({}, function (transition) {
                var newToState = transition.to();
                if(!checkPermissionForView(newToState)) {
                         return $state.target('login');
                }
        });
}

...

checkPermissionForView : function (state) {
                if (!state.requiresAuthentication) {
                    return true;
                }

                return userHasPermissionForState(state);
            }

  userHasPermissionForState : function(view){
                if(!isLoggedIn()){
                    return false;
                }
            }

  isLoggedIn : function () {
                var user = JSON.parse(localStorage.getItem("user"));
                console.log(user);
                return user != null;
            }

Я настоятельно рекомендую прочитать Руководство по переходным крюкам

Другие вопросы по тегам