ANGULAR-UI-ROUTER: Löse den Status von der URL

8

Ich mache eine App mit dynamischen Zuständen, und manchmal muss ich den Statusnamen von der URL auflösen.

Beispiel: Ich habe /dashboard/user/12268 und ich muss den Status 'dashboard.user' erhalten.

Gibt es eine Möglichkeit, dies mit den Tools von ui-router zu tun? Ich kann nicht herausfinden, wie man das jetzt macht ...

Ich mache eine App mit dynamischem Modulladen mit requireJS. Zum ersten Mal gibt es kein Problem, da der Benutzer in den Anmeldestatus gesendet wird. Nach der Anmeldung verwende ich require, um nur die Status zu laden, auf die der Benutzer Zugriff hat. Aber wenn der Benutzer die Seite neu lädt, lade ich die Module erneut und muss die URL in einen Zustand auflösen, und da ist das Problem. Ich habe angefangen mit urlMatcherFactory zu versuchen, kann sie aber nicht lösen.

Der Status wird nach der URL-Auflösung geladen.

Der Fluss ist (nach dem Aktualisieren der Seite http://localhost:8090/index.html#/dashboard/user/12268 ):

  • bootstrap die App (ohne states)
  • An diesem Punkt wurde ui-router geladen
  • ruft die Status ab, auf die der Benutzer zugreifen kann, und registriert sie (diese Status werden nach der Konfigurationsphase registriert)
  • finde heraus, ob ich einen Zustand habe, der der gegebenen URL entspricht, um dorthin umzuleiten. Hier stecke ich fest.

Um die Zustände nach dem Bootstrap der Anwendung zu laden, habe ich eine Variation von Ben Nadels Lösung , die Zustände und Konstanten enthält.

Mein data-main in RequireJS hat diesen Initialisierungscode:

%Vor%

Die loadManifest -Funktion registriert alle After-Bootstrap-Elemente in meiner App (Dienste, Fabriken, Controller, Router, ...).

Danke für Ihre Hilfe,
Alx

    
Alex Such 27.04.2015, 09:49
quelle

4 Antworten

14

Ссылка

Sie können die Implementierung des internen Status anzeigen, indem Sie den .decorator Hook für $stateProvider verwenden. Sie können jede Eigenschaft des Status-Builders dekorieren. Ich habe 'Eltern' willkürlich gewählt.

%Vor%

Jetzt können Sie mit .$$state() , z. B.

, auf das interne Statusobjekt zugreifen %Vor%

Zweitens durchlaufen Sie jeden Zustand in $ state.get () und testen Sie sie mit Ihrem URL-Fragment.

%Vor%     
Chris T 18.06.2015 21:21
quelle
1

Schließlich musste ich eine kleine Änderung am $state -Dienst von ui-router vornehmen, um zur Lösung zu gelangen.

Daraus ergibt sich, dass die im Service gespeicherten Status mehr Informationen enthalten als die in der Methode $state.get() angegebene. Also habe ich über sie iteriert, um einen Zustand zu erhalten, der meiner URL entspricht:

%Vor%

Grüße, Alx

    
Alex Such 27.04.2015 13:46
quelle
0

Um @Chris T Lösung für mich arbeiten zu lassen, mache ich dies in einem Service:

%Vor%

Später kann ich Helper irgendwo injizieren und mache das:

%Vor%     
Digitlimit 15.06.2016 11:18
quelle
-2

Der aktuelle Status kann von $ state service abgerufen werden. wie $state.current Überprüfen Sie diese api Ссылка

    
manasi sakhare 27.04.2015 09:57
quelle