Unterstaat mit mehreren Eltern / Route für Modal, das sich über mehrere Zustände öffnet

8

Ich habe einen abstrakten profile -Zustand, der mehrere untergeordnete Zustände hat (für verschiedene Registerkarten der Profilseite), und dann möchte ich, dass ein anderer untergeordneter Status des Profils modal ist. Ich habe es in etwa so umgesetzt:

%Vor%

Das funktioniert großartig, außer dass editprofile ein Geschwister aus Quadraten und Kreisen ist. Wenn dieser Zustand aktiv ist und das Modal sichtbar ist, wird der Quadrats- oder Kreisstatus entladen und beim Modal wieder geladen ist geschlossen.

Gibt es eine Möglichkeit, diese Status aktiv zu lassen, wenn der profile.editprofile-Status aktiv ist? Ich bin nach etwas wie state..editprofile .

    
Josh Hunt 27.03.2014, 23:12
quelle

4 Antworten

3

Da es zur Zeit keine ideale Lösung gibt, habe ich mir eine einigermaßen elegante Lösung ausgedacht. Mein Code ist verallgemeinert, leicht zu verstehen und zu kommentieren, so dass er leicht an jedes Projekt angepasst werden kann.

Siehe die Kommentare im Code für die wichtigsten Punkte.

Live-Demo (klicken).

Beispielzustände

%Vor%

Controller

%Vor%

Anzeigen

%Vor%     
m59 10.09.2014 02:04
quelle
2

Nun, es sei denn, Sie wollen die modale Implementierung abbrechen, dann würde ich vorschlagen, dass Sie 2 Ansichten in profile.html eins für editprofile.html und andere für profilecircles.html oder profilesquares.html haben, etwa wie folgt:

%Vor%

Und dann der schwierige Teil zum Anzeigen / Verbergen der Profilansicht. Aber das kann mit einer Umschalttaste erfolgen oder nachdem die Aktion im Controller bestätigt wurde.

    
Aivaras Prudnikovas 28.03.2014 01:04
quelle
1

Der Punkt von ui-router ist, dass die Verschachtelung der Zustände mit der Verschachtelung der URL übereinstimmt. Was das bedeutet, ist in Ihrem Fall, wenn Sie:

%Vor%

Sie können nicht erwarten, dass profile.squares und profiles.edit gleichzeitig aktiv sind, da es sich um zwei völlig unterschiedliche URLs handelt. Es ist jedoch möglich zu haben:

%Vor%

Dadurch werden profiles.circles während Ihres Modals aktiv, da es sich um einen übergeordneten Status handelt. Aber im Falle von profiles.squares, wenn Sie einen Status haben wollen, der das Bearbeitungsprofil darstellt, benötigen Sie etwas wie:

%Vor%

Leider gibt es keinen anderen Weg, wenn Sie die Bearbeitung als Status beibehalten möchten.

    
Wawy 02.04.2014 16:00
quelle
0

Sie können Ihre Registerkartenstatus sticky: true festlegen, indem Sie ui-router-extras verwenden. Sticky-Zustände bleiben beim Navigieren zu einem Geschwister erhalten und sind besonders nützlich für Tabs.

Um es zu verwenden, müssen Sie eine benannte Ansicht für jeden klebrigen Zustand erstellen (Sie können jedoch inaktive anzeigen, siehe unten).

Die API-Seite beschreibt die notwendigen Schritte:

  1. Markieren Sie einen Status mit sticky: true
  2. Deklariert eine benannte Sicht auf den Zustand, der auf eine benannte ui-Sicht in der Schablone des Elternzustands abzielt, z. %Code%
  3. Fügen Sie die benannte ui-view der Vorlage des übergeordneten Status hinzu, z. %Code%
  4. Optional können Sie die benannte ui-view ausblenden, wenn der Status nicht aktiviert ist, z. %Code%
theDmi 10.07.2015 18:30
quelle

Tags und Links