Frage

Ich verwende die Hot Towel-Winkelbibliothek (https://github.com/johnpapa/hottowel-angular-bower) an einem Projekt, das ich von einem leitenden Entwickler übernommen habe.

Ich integriere auch die Authentifizierungsbibliothek von Auth0 für Angular.

Ich muss einige Routen auf authentifizierte Benutzer beschränken.Dazu habe ich einige Routeneigenschaften festgelegt.
isLogin: true für Routen, die auf nicht authentifizierte Benutzer beschränkt ist.
requiresLogin: true für Routen, die eine Authentifizierung erfordern, und das Gegenteil für diejenigen, die dies nicht tun.Um diese Eigenschaften bei jedem Durchlauf zu überprüfen, verwende ich $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');
            }
        }
    })
});

Nun scheint es, dass dies die Spinner-Funktionalität von Hot-Towel beeinträchtigt.In Shell.js finde ich Folgendes:

$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); }
);

Was passiert, ist, dass der Spinner nie aufhört zu rotieren (z.B.vm.isBusy = true, da ein Controller nie aktiviert wird und dies zurückgesetzt wird), wie kann ich das umgehen?

War es hilfreich?

Lösung

Eine Idee besteht darin, dass Sie ein Ereignis ($broadcast) verwenden könnten, um zu benachrichtigen, wenn der unautorisierte Zugriff erfolgt, damit es dann vom Controller empfangen wird, der den Spinner ausschaltet.

Andere Tipps

Ich habe Ihren Code noch nicht sehr lange studiert, aber Sie sollten ihn nicht verwenden $routeChangeSuccess um den Spinner zu stoppen?

$scope.isViewLoading = false;
$scope.$on('$routeChangeStart', function() {
    $scope.isViewLoading = true;
});
$scope.$on('$routeChangeSuccess', function() {
    $scope.isViewLoading = false;
}); 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top