Спиннер погрузка на RouteChangeStart с библиотекой аутентификации

StackOverflow https://stackoverflow.com//questions/25016170

Вопрос

Я использую угловую библиотеку горячего полотенца ( https://github.com/johnpapa/ Hottowel-Angular-Bower ) на проекте, который я унаследовал старшего разработчика.

Я также включаю в себя библиотеку аутентификации auth0 для угловых.

Мне нужно ограничить некоторые маршруты для аутентифицированных пользователей. Для этого я установил некоторые свойства маршрута.
isLogin: true для маршрутов, которые ограничены не аутентифицированными пользователями.

requiresLogin: true для маршрутов, нуждающихся в аутентификации, и противоположность тем, кто этого не делает. Чтобы проверить эти свойства на каждом протяжете, я использую $rootScope.$on('$routeChangeStart' function()).

app.run(function ($rootScope, $location, auth, common, config) {
    var getLogFn = common.logger.getLogFn,
        log      = getLogFn('auth handle'),
        events   = config.events;

    $rootScope.$on('$routeChangeSuccess', function (e, nextRoute, currentRoute) {
        if (nextRoute.$$route && nextRoute.$$route.settings && nextRoute.$$route.settings.requiresLogin) {
            if (!auth.isAuthenticated) {
                $location.path('/login');
                log('User not authenticated');
            }
        }
        if (nextRoute.$$route && nextRoute.$$route.settings && nextRoute.$$route.settings.isLogin) {
            if (auth.isAuthenticated) {
                $location.path('/');
                log('User is authenticated');
            }
        }
    })
});
.

Теперь, кажется, это мешает функциональностью спиннера, включенной с горячим полотенцем. В Shell.js я находим следующее:

$rootScope.$on('$routeChangeStart',
    function (event, next, current) { toggleSpinner(true); }
);

$rootScope.$on(events.controllerActivateSuccess,
    function (data) { toggleSpinner(false); }
);

$rootScope.$on(events.spinnerToggle,
    function (data) { toggleSpinner(data.show); }
);
.

Что происходит, в том, что спиннер никогда не перестает вращаться (например, vm.isbusy= true, потому что контроллер никогда не активируется и сбрасывает это), как бы я работал вокруг этого?

Это было полезно?

Решение

Одна идея состоит в том, что вы можете использовать событие (трансляцию), чтобы уведомить, когда уполномоченный доступ ООН сделан, чтобы он был получен контроллером, который выключает спиннер.

Другие советы

Я не изучал свой код в течение очень длительного времени, но если вы не должны использовать $routeChangeSuccess, чтобы остановить спиннер?

$scope.isViewLoading = false;
$scope.$on('$routeChangeStart', function() {
    $scope.isViewLoading = true;
});
$scope.$on('$routeChangeSuccess', function() {
    $scope.isViewLoading = false;
}); 
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top