Pergunta

Eu estou usando a Toalha Quente angular (bibliotecahttps://github.com/johnpapa/hottowel-angular-bower) em um projeto que eu herdei de um desenvolvedor sênior.

Eu também estou incorporando Auth0 de autenticação da biblioteca Angular.

Eu preciso restringir algumas rotas para usuários autenticados.Para fazer isso, eu definir algumas propriedades da rota.
isLogin: true para as rotas que é restrito para usuários não autenticados.
requiresLogin: true para as rotas que precisam de autenticação, e o oposto por aqueles que não o fazem.Para verificar estas propriedades em cada percorrer, eu 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');
            }
        }
    })
});

Agora, parece que este está a interferir com o spinner funcionalidades incluídas com Hot-Toalha.No Shell.js eu acho o seguinte:

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

O que acontece é que o spinner nunca pára de girar (por exemplo,vm.isBusy = true porque um controlador de nunca será ativado e a redefinição), como posso contornar este problema?

Foi útil?

Solução

Uma idéia é que você pode usar em um evento ($broadcast) para notificar quando a onu autorizou o acesso é feito tão em seguida, ele é recebido pelo controlador desliga o spinner.

Outras dicas

Eu ainda não estudou o seu código por muito tempo, mas você não deveria usar o $routeChangeSuccess para parar a roleta?

$scope.isViewLoading = false;
$scope.$on('$routeChangeStart', function() {
    $scope.isViewLoading = true;
});
$scope.$on('$routeChangeSuccess', function() {
    $scope.isViewLoading = false;
}); 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top