Спиннер погрузка на RouteChangeStart с библиотекой аутентификации
-
21-12-2019 - |
Вопрос
Я использую угловую библиотеку горячего полотенца ( 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;
});
.