Zugriff auf aktuelle route name aus einem controller oder Komponente
Ich muss, um eine "active" - Klasse, um eine bootstrap-Registerkarte, abhängig von der aktuellen route name. Die route-Objekt enthält "routeName" aber, wie ich Zugriff auf diese aus einem controller oder Komponente?
Können diese diesem.controllerFor('Anwendung').get('currentRouteName')
yep, das ist ziemlich genau das, was ich will
ember wird dies für Sie tun. verwenden Sie einfach den link-auf Ihre tabs
yep, das ist ziemlich genau das, was ich will
ember wird dies für Sie tun. verwenden Sie einfach den link-auf Ihre tabs
InformationsquelleAutor jax | 2015-05-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für Glut 2, die von einem controller, den Sie ausprobieren können :
Dann können Sie übergeben es an die Komponente.
InformationsquelleAutor Diogo Alves
Verwenden Sie diese
this.controllerFor('application').get('currentRouteName');
Sollte es in Ember 1. Im nicht sicher, über ember 2. Ich havent arbeitete in ember für einige Zeit. Aber ich denke es nicht, da Controller immer ersetzt zu Gunsten von routingfähige Komponenten in ember 2. Ich bin nicht einmal sicher, ob Sie sich bereits in diese Richtung. Aber es wäre toll, wenn u könnte update hier, wenn u eine alternative gefunden.
Nein, ich meinte,
controllerFor
ist eine öffentliche Methode vonEmber.Route
im Ember 2 es ist auch eine private statische MethodeEmber
, aber ich glaube nicht, es ist eine Methode derEmber.Component
, auch private. In anderen Worten, dies würde die Arbeit von einem Weg, der aber nicht von einer Komponente, weilcontrollerFor
nicht zugänglich.Vielen Dank für die Aufklärung. Macht Sinn, denn die Komponenten sollten idealerweise nur Zugriff auf die Sachen übergeben von der Steuerung oder über dependency injection.
Dies funktioniert nicht in Ember 2. Zumindest nicht von einer
controller
,this.controllerFor
ist nicht mehr definiert. Ich denke, Sie können es tun, aber Sie müssen verwenden Sie dieregistry
odercontainer
oder so ähnlich.InformationsquelleAutor blessenm
In der Tat, Sie brauchen nicht zu gelten aktive Klasse von selbst. Ein
link-to
Helfer wird es für Sie tun.Sehen hier:
Folge
InformationsquelleAutor Jeffrey C
In absolut hoffnungsloser Fall, kann man den router oder das application-controller (was macht ein 'currentRouteName' - Eigenschaft) über
this.container.lookup("router:main")
oderthis.container.lookup("controller:application")
von innerhalb der Komponente.Wenn es einen gemeinsamen trend für mich, ich würde einen CurrentRouteService und injizieren es in meiner Komponente(N), so dass ich mock Dinge leichter in meinen tests.
Kann es auch sein, eine bessere Antwort zu kommen - aber der container.lookup() sollte knock down Ihre aktuelle blocker.
this.container.lookup("router:main").get('currentRouteName')
InformationsquelleAutor Nick Williams
Da Ember 2.15, können Sie dies durch die öffentliche Router-Dienst.
https://www.emberjs.com/api/ember/release/classes/RouterService
Die funktionierte wirklich gut für mich, denn ich wollte etwas berechnet aus der aktuellen route. Der Dienst stellt currentRouteName, currentURL, Lage, und rootURL.
currentURL hat die query params, aber würden Sie brauchen, um zu analysieren, Sie aus der URL.
InformationsquelleAutor user3381840
Erkenntnisse von @maharaja-santhir die Antwort, man denke an die Einstellung der routeName Eigenschaft auf dem Ziel-controller zu verwenden, z.B., in das Ziel-template. Auf diese Weise gibt es keine Notwendigkeit für die Definition der Logik auf mehrere Standorte und damit die code-Wiederverwendbarkeit. Hier ist ein Beispiel, wie das zu erreichen:
Definition dieses
willTransition
Aktion in der Anwendung route ermöglicht für die Auslieferung der aktuellen route name überall in der Anwendung. Beachten Sie, dass die target-controller behält diecurrentRouteName
- Eigenschaft die Einstellung auch nach dem navigieren Weg zu einer anderen route. Dies erfordert eine manuelle Bereinigung, wenn nötig, aber es könnte akzeptabel sein, je nach Implementierung und Verwendung.didTransition()
statt?möglicherweise, wenn auch nicht 100% sicher, aber je nachdem, was für Sie akzeptabel. Ich habe es getan, auf diese Weise zu ermöglichen, die für die überprüfung der Ziel-route vor dem übergang, da ich nicht möchte, um das Feuer ein übergang zurück, wenn das Ziel Weg war nicht erlaubt, meine app ' s flow/Logik.
InformationsquelleAutor ashraf