• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Ajax Rule - Bedingung zur Weiterleitung

ineedmny

Mitglied
Hallo Zusammen,

ich bin mittlerweile auf die Möglichkeit gestoßen, dass es "rules" für eine bedingte Weiterleitung im UI-Router von Angular gibt.

Die Weiterleitung hab ich soweit hinbekommen...

Code:
$urlRouterProvider.rule(
      function ($injector, $location) {
        var path = $location.url();
       
        if(path == "/abmelden") {
          $location.replace().path('/home');
        }
});

...aber die Bedingung dafür funktioniert nicht richtig...

Code:
$urlRouterProvider.rule(
      function ($injector, $location) {
        var path = $location.url();
       
        if(path == "/abmelden")
        {
          AjaxData = 'data=UserGetOnlineStatus;';
          AjaxSend(function(result) {

            if(result == 0)
            {
              $location.replace().path('/home');
            }

          });
        }
      });

So sieht die Funktion "AjaxSend" aus:

Code:
function AjaxSend(callback)
{
  jQuery.ajax({
      type: "POST",
      url: "response.php",
      dataType: "text",
      data: AjaxData,
     
      success: callback,
     
      error: function (xhr, ajaxOptions, thrownError){
          console.log('Error: ' + thrownError);
      }
  });
}

Der Ajax-Request (UserGetOnlineStatus) schaut, ob die Session-Variable des Users existiert und gibt folgendes zurück:
result = 0 (Offline) ODER Die User-ID (Online)

Das funktioniert auch soweit. Auch das Ergebnis kommt an, aber aus irgendeinem Grund, leitet der Router nicht auf die Seite "/home" weiter - obwohl die "0" tatsächlich ankommt :-/

Ich steh auf dem Schlauch. Verwende ich die Funktion vielleicht sogar falsch?

Vielen Dank schonmal!
 
Werbung:
Habe gerade wenig Zeit, aber konzeptionell würde ich es so machen, dass wenn ein User sich anmeldet, dieser Zustand im localStorage gespeichert und bei Abmeldung der key aus dem Storage gelöscht wird. Ein serverseitiger Request ist dazu nicht notwendig. Außerdem solltest du mehr Angular-style arbeiten. Nicht $location.replace().path('/home') sondern $location.path('/home').

$.ajax() hat in Angular nichts zu suchen. Dafür gibt es $http und $resource. Falls du trotzdem jQuery-Methoden verwenden willst, dann auf Angular-Objekte, also angular.element(event.target) statt $(this).
 
Danke für die Antwort!

Stimmt, localStorage bietet sich hier eigentlich an. Werde mir das mal genauer anschauen.
Ich hab gelesen, dass es einen "UserService" für den UI-Router gibt, nur versteh ich nicht ganz wie das funktioniert und finde auch nichts Weiteres in der Doku. Kennst du das?

Danke für den Hinweis. Hab das offensichtlich noch nicht ganz verstanden, wo ich was verwenden muss :confused:
 
Werbung:
Ich kenne den UI Router nicht, aber falls du den Status eines Users abfragen und darauf basierend Berechtigungen wie lesen und schreiben oder Aufruf von Routen vergeben willst, lässt sich das mittels einer Access Control List (ACL) bewerkstelligen. Nach dem Erzeugen des User Objects werden diesem role und permissions zugewiesen. Beispiel:

Code:
//role          //can (permissions)
guest           ['read_postings']
registered_user ['create_postings', read_postings']
admin           ['create_postings', read_postings', 'update_postings', 'delete postings']

Dafür gibt es ein Plugin
https://github.com/mikemclin/angular-acl
 
Hört sich interessant an. Werde ich mir auch mal anschauen.

Auf jeden Fall: du bist der Killer :D mit localStorage geht es ohne Probleme und die Abfrage über Ajax war mir an der Stelle sowieso nicht ganz geheuer!

DANKE!!! :)
 
Zurück
Oben