Spinner caricamento su routechangestart con biblioteca di autenticazione
-
21-12-2019 - |
Domanda
Sto usando la biblioteca angolare del tovagliolo caldo ( https://github.com/johnpapa/ Hottowel-Angular-Bower ) su un progetto ho ereditato da uno sviluppatore anziano.
Sto anche incorporando la Biblioteca di autenticazione Auth0 per angolare.
Ho bisogno di limitare alcuni percorsi agli utenti autenticati. Per farlo, ho impostato alcune proprietà del percorso.
isLogin: true
per rotte che è limitato a utenti non autenticati.
requiresLogin: true
per i percorsi che necessitano di autenticazione e il contrario per coloro che non lo fanno. Per verificare queste proprietà su ogni rhlhrough, uso $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');
}
}
})
});
.
Ora, sembra che questo interferisca con la funzionalità dello spinner inclusa con un tovagliolo caldo. In Shell.js Trovo quanto segue:
$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); }
);
.
Cosa succede è che lo spinner non smette mai di girare (ad esempio Vm.isbusy= true perché un controller non è mai attivato e resettato questo), come dovrei lavorare intorno a questo?
Soluzione
Un'idea è che è possibile utilizzare un evento ($ Broadcast) per notificare quando viene effettuato l'accesso autorizzato dell'ONU è quindi ricevuto dal controller che spegne lo spinner.
Altri suggerimenti
Non ho studiato il tuo codice per molto tempo ma non dovresti usare $routeChangeSuccess
per fermare lo spinner?
$scope.isViewLoading = false;
$scope.$on('$routeChangeStart', function() {
$scope.isViewLoading = true;
});
$scope.$on('$routeChangeSuccess', function() {
$scope.isViewLoading = false;
});
.