Beenden Sie die Angular-UI-Router-Navigation, bis das Versprechen erfüllt ist

Ich möchte ein Flackern verhindern, das auftritt, wenn das Zeitlimit für Rails überschritten wird, aber Angular weiß es erst beim nächsten Autorisierungsfehler einer Ressource.

Was passiert ist, dass die Vorlage gerendert wird, einige Ajax-Aufrufe für Ressourcen stattfinden und wir dann zu Rails weitergeleitet werden, die sich anmelden. Ich würde lieber bei jeder Statusänderung einen Ping an die Rails senden. Wenn die Rails-Sitzung abgelaufen ist, werde ich sofort umleiten, BEVOR die Vorlage gerendert wird.

ui-router hat eine Lösung, die auf jede Route angewendet werden kann, die aber überhaupt nicht trocken zu sein scheint.

Was ich habe, ist das. Das Versprechen wird jedoch erst dann gelöst, wenn der Staat bereits übergegangen ist.

$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){
        //check that user is logged in
        $http.get('/api/ping').success(function(data){
          if (data.signed_in) {
            $scope.signedIn = true;
          } else {
            window.location.href = '/rails/devise/login_path'
          }
        })

    });

Wie kann ich den Zustandsübergang unterbrechen, bevor die neue Vorlage basierend auf dem Ergebnis eines Versprechens gerendert wird?

Antworten auf die Frage(10)

Ihre Antwort auf die Frage