Eckige 2 - Prüfen Sie die aktuellen active route "name"
Ich habe eine Eckige 2-Anwendung mit mehreren geschachtelten Kinder zu sehen. Aber es wird angezeigt auf der gleichen Seite obwohl für einige router-outlet
.
const routes: Routes = [
{
path: 'queue/:date/:offset/:type',
component: BundleListComponent,
resolve: {
response: BundleListResolve
},
children: [
{
path: ':bundleId', component: PointListComponent,
resolve: {
response: PointListResolve
},
children: [
{
path: ':pointId', component: TaskListComponent,
resolve: {
response: TaskListResolve
},
children: [
{
path: ':taskId', component: TaskDetailComponent,
resolve: {
response: TaskDetailResolve
}
},
{ path: '', component: EmptyComponent }
]
},
{ path: '', component: EmptyComponent }
]
},
{ path: '', component: EmptyComponent }
]
},
{
path: 'queue',
component: QueueRedirectComponent
}
}
Also im Grunde kann ich Reisen Sie durch die Liste der route
- /queue
- /queue/:/Datum:offset/:Typ
- /queue/:/Datum:offset -/: - Typ/-: bundleId
- /queue/:/Datum:offset -/: - Typ/-: bundleId/:pointId
- /queue/:/Datum:offset -/: - Typ/-: bundleId/:pointId/:taskId
Beispielsweise
#/queue/2017-01-05/480/20/57f4c26507b36e3684007b52/1/57fb0abb07b36e39d8e88df8/1
Stellen Sie sich vor Sie haben eine Seite mit einigen element:
- UI-Anteil zeigte einen Film Liste
- Der andere Teil zeigt ein Film die Details bei Klick in ein Element in einer Film-Liste, aber die Anzeige auf der gleichen Seite.
- Anderen Teil zu zeigen, einen Charakter Details bei Klick in Charakter-Namen, die auf-Film-Details, und zeigen auch auf der gleichen Seite.
- etc...
Grundsätzlich, ich kann noch klicken Sie in movie-Liste, während ich bin Leser einen Charakter detail.
Suche für die Festlegung der Namen für die verschiedenen route, aber scheinen alle die Antwort-Bericht dieses feature hat sich bereits entfernt von Winkel-2 Finale. Im Winkel 1 mit UI-Router, kann ich den Namen anzugeben, für jede Strecke und können sich die route ganz einfach mit built-in-Funktion state.is(ROUTE_NAME)
.
So, was ich jetzt mache ist auf Basis der Fenster.Lage, um die URL und die Aufteilung dieser string von /
um die Anzahl der Parameter. Aber Es ist mehr hart codiert.
Jede Erfahrung, die auf das gleiche zu tun? Wie kann ich unterscheiden, welche route ist zurzeit aktiv?
Ich habe dies schon vor gefragt. Denn meine route ist nur enthalten dynamische id. So bekommen Sie die URL vom router oder aus dem Fenster Lage das gleiche tun wird. Ich brauche die Fähigkeit zu unterscheiden, die Strecke 🙂
Sorry, du hast Recht. Was über diesem 😉 stackoverflow.com/questions/34323480/...
Vielen Dank für Ihren Vorschlag, aber ich habe auch überprüft, diese hier schon. Es geht mehr um die aktive Klasse, die für die aktuelle route, die unterstützt wird durch den Winkel-2 durch routerLinkActive Richtlinie bereits.
Mann, den Sie wirklich haben Sie Hausaufgaben 🙂
InformationsquelleAutor trungk18 | 2017-01-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, es ist ein Problem mit Scott ' s Antwort, wo er verwendet die ActivatedRoute Konstruktor des service. Diese route wird nicht aktualisiert.
Ich dachte an eine andere Lösung, die möglicherweise peek Ihr Interesse. Es kommt wieder nach unten über die Verwendung der
data
- Eigenschaft auf den Strecken, aber jetzt mit einem anderen beheben service:Sind Sie gehen zu müssen, eine
RouterConfig
wie dieses, wo für jede route, die Sie hinzufügenstate: StateResolve
und ein Daten-Objekt, das den Zustand name:vergessen Sie nicht, fügen Sie die StateResolve service, um den Anbietern array
Ihre
StateResolve
service wird in etwa so Aussehen:Offensichtlich benötigen Sie ein
StateService
hat diesetState
Methode, aber ich denke, von hier aus ist es ziemlich selbsterklärend.Vielleicht mit einem
resolve
guard ist ein wenig exzentrisch, aber wenn man darüber nachdenkt, die Sie zu lösen versuchen-Daten, bevor Sie die route. In diesem Fall wird der Zustand innerhalb des Daten-variable, so macht es Sinn, dieResolve
Zugriff auf diedata
Eigenschaftfroh, dass ich helfen konnte. Ich bin mit dieser Umsetzung in meinem ganzen apps auch 🙂 leider ist die bounty wurde bereits verschenkt, aber es ist alles über das helfen, richtig 🙂
InformationsquelleAutor PierreDuc
Erstellen Sie einen Dienst namens
ActiveState
diesubscribe
um änderungen an den router, mitrouter.events.subscribe
:Dann auf Ihrer route fügen wir einen einfachen Wert auf die
data
param von der route genanntstateName
für jeden Staat, wir wollen Namen:Dann, wenn Sie Spritzen
state : ActiveState
können Sie einfach testen, den Wertstate.is("Point")
Du bist herzlich willkommen. Ich hoffe, es ist nützlich. 🙂 Ich Wünsche Mitgliedstaaten benannt sein kann auch.
Ja, ich denke, der name des Landes ist sehr nützlich, manchmal.
Ich habe vereinfacht, diesen code wieder zu verwenden
data
statt einem resolver. So ist es viel einfacher zu Lesen und zu verwalten.Oh, ich vergaß es schon, da ich gegeben habe, das Kopfgeld für ihn. Dank Scoot
InformationsquelleAutor Scott
name
entfernt wurde vor einiger Zeit von Routen, Strecken geben, fügen Sie beliebige DatenDieser code erstellt ein Titel aus dem Namen aller Teilstrecken. Dies könnte wahrscheinlich vereinfacht werden für Ihren Anwendungsfall.
Siehe auch Ändern Sie den Titel der Seite mit der Eckigen 2 neue router
InformationsquelleAutor Günter Zöchbauer
Erstellen Sie einen Dienst namens
ActiveState
:In Ihre Resolver wie
PointListResolve
...TaskListResolve
etc.So, in der anderen Resolver aktualisieren Sie die
this.state.setActive("")
Wert wie erforderlich.Dann zu bestimmen, welche Zustand Sie sich befinden, injizieren
ActiveState
wo Sie wollen, um den aktuellen Status, wie in einer@Component
, d.h.Hinweise:
Vergessen Sie nicht zu registrieren, Ihre
ActiveState
service alsProvider
in:Einfacher - Nicht Beobachtbaren-Version ich habe eine
Observable<string>
so änderungen an den active-Zustandsubscribed
zu, aber dies könnte vereinfacht werden, um nur einstring
wenn Sie nicht möchten, dass die Funktionalität:Dann, wenn Sie Spritzen
state : ActiveState
können Sie einfach testen, den Wertstate.is("Point")
Ich hoffe, das ist nützlich.
InformationsquelleAutor Scott
meine Antwort ist ähnlich, aber hat einen anderen Weg, so dass ich denke, es ist gut zu posten
Was anders ist: ich brauche nicht zu ändern, alles auf meine Routen, ich habe einen Dienst zu verfolgen, die tiefer ActivatedRoute (innen-oder firstChild...firstChild)
erstellen der service
dann in der app.Komponente.ts ich den Dienst starten (nur um sicherzustellen, dass es immer eine tracking)
und schließlich, nehmen Sie Ihre route, wo immer service Sie sind:
Beantwortung der Frage, können Sie einfach den deeperActivatedRoute und überprüfen Sie normalerweise die snapshop.url, so wie du tun würde-in eine Komponente
InformationsquelleAutor LuizAsFight