Сложно с событиями $ locationChangeStart и $ stateChangeStart в AngularJS

0

У меня классическая проблема, когда событие $locationChangeStart срабатывает несколько раз. Я попытался использовать preventDefault но я не могу справиться с этим.

Две проблемы: первый сценарий использует $location а второй использует $state:

  1. После аутентификации пользователя я перенаправляю с помощью $state.go('main'), однако $locationChangeStart запускается снова. Я не хочу этого поведения.
  2. С событием ui-router $stateChangeStart я в основном попадал в сценарий с infinite loop. Это означает, что когда это событие срабатывает, я проверяю user authentication. Если пользователь НЕ аутентифицирован, я перенаправляю его с помощью $state.go('login'); , Это вызывает бесконечный цикл.

Здесь мои app.js для начинающих:

(function () {
    'use strict';
    angular.module('rage', [
       'ui.router',
       'ui.bootstrap',
       'ui.dashboard',
       'kendo.directives'       
    ]).run(['$rootScope', '$state',  '$location', 'userService', 'loginService', init]);

    function init($rootScope, $state, $location, userService, loginService) {
        $rootScope.rageSessionVars = {};
        $rootScope.$state = $state;        
        $rootScope.isLoggedin = false;   // just something to possibly use ???


        $rootScope.$on('$locationChangeStart', function () {

            var userToken = loginService.getUserCookie();

            // check if cookie expired, then authenticate user !
            if (userToken) {
                if (!loginService.isUserCookieExpired(userToken)) {
                    if (loginService.authUser(userToken)) {
                        $state.go('main');
                    }
                    else {                     
                        $location.url('index.html#/?login');    // not authenticated !
                    }
                }
            }
            else {
                $state.go('login');
                $location.url('index.html#/?login');
            }
        });

    }

})();

Я также создал плункер для аналогичного сценария вчера, и просто изменил app.js чтобы теперь включить событие locationChangeStart.

Интернет-плункер здесь: http://plnkr.co/edit/hsSrPqFp0hpJ4A8cTsVL?p=preview

Итог: я хотел бы подключиться к одному из этих событий для плавного входа пользователя/выхода из системы, но я всегда оказываюсь в ловушке этих угловых событий.

Заранее благодарю за советы экспертов.

привет, Боб

  • 0
    Делать это с точки зрения преобразователей маршрутов всегда предпочтительнее stackoverflow.com/a/33021912/3731501
Теги:
angular-ui-router
login

1 ответ

1

Используя угловой ui-маршрутизатор, используйте $stateChangeStart и $stateChangeSuccess для управления такими действиями, как аутентификация и ручная маршрутизация при изменении состояния.

  • 0
    Я использовал $stateChangeStart , но $stateChangeStart с подобной ситуацией, когда он срабатывал несколько раз. Возможно, я должен вернуться к событиям $ stateChangeStart
  • 0
    Итак, я обновил свой план для включения $rootScope.$on('$locationChangeStart') . Я, кажется, уже в неопределенном цикле. Боже мой - plnkr.co/edit/hsSrPqFp0hpJ4A8cTsVL токен возврата; };
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню