Ich habe eine Situation, in der ich ein Resolve verwendet habe, um einige Daten von einer entfernten Quelle über einen HTTP-Aufruf vorzuladen, bevor ich zu einer Komponente navigiere. Jetzt muss ich eine Schutzlogik implementieren, die abhängig von einigen Bedingungen erfordert, dass Daten vorgeladen werden, um einige Felder gegenüber dem aktuellen Benutzer zu verifizieren.Angular2 Daten von CanActivate Guard an Resolver Resolver übergeben?
Ich möchte vermeiden, genau die gleiche Anfrage an das Back-End in der CanActivate
Wache und dann unmittelbar danach in der Resolve
.
Gibt es eine Möglichkeit, auf die Routendaten von innerhalb der CanActivate
oder die Route-Konfiguration zugreifen, um den Resolver vorübergehend zu überschreiben und nur den Wert auf das Datenobjekt, da ich habe, was ich anfordern werde?
Ich habe versucht, mit etwas so einfach wie
route.data['myData'] = value;
wegzukommen Aber das ist ein Fehler, weil „Objekt nicht erweiterbar ist“.
Ich habe auch versucht, so etwas wie:
this.router.routerState.root.data['myData'] = value;
Welche Fehler nicht erstellt haben, jedoch waren die Daten nicht in das route.data
Element des Verfahrens Resolve.resolve()
überlebt.
Ich möchte etwas zu benutzerdefiniert oder hacky wie temporäres Speichern des Objekts auf dem Dienst wie eine Art Cache vermeiden. Gibt es einen Standardmechanismus zum Übertragen von Daten zwischen internen Router-Elementen, um fortgeschrittenes Pre-Fetching und so etwas wie Dateneigentumsüberprüfungen zu unterstützen?
EDIT Die routerState funktioniert, wenn Sie den Router in den Konstruktor der Resolve
Klasse, und greifen Sie auf die gleiche Weise zu injizieren. Dies muss jedoch hinterher gelöscht werden, andernfalls bleibt es zwischen Navigationsaufrufen bestehen.