Muszę zastosować "aktywną" klasę do zakładki ładowania początkowego w zależności od aktualnej nazwy trasy. Obiekt trasy zawiera "routeName", ale jak uzyskać do niego dostęp z kontrolera lub komponentu?Dostęp do aktualnej nazwy trasy z kontrolera lub komponentu
Odpowiedz
Dla Ember 2 ze sterownika można spróbować:
appController: Ember.inject.controller('application'),
currentRouteName: Ember.computed.reads('appController.currentRouteName')
Następnie można przekazać do komponentu.
W absolutnie rozpaczliwym przypadku można wyszukać router lub kontroler aplikacji (który ujawnia właściwość currentRouteName) za pośrednictwem this.container.lookup("router:main")
lub this.container.lookup("controller:application")
z poziomu komponentu.
Gdyby to był wspólny trend, wykonałbym usługę CurrentRouteService i wstrzyknęłabym ją do mojego komponentu (-ów), dzięki czemu będę mógł łatwiej kpić z moich testów.
Może być również lepsza odpowiedź, ale przyjdź do kontenera.lookup(), aby usunąć obecny bloker.
Powraca dla mnie niezdefiniowana: 'this.container.lookup (" router: main ").get ('currentRouteName') ' – jax
Użyj tego this.controllerFor('application').get('currentRouteName');
Czy działa to z komponentu? – Huafu
@ Huuu Powinien działać w Ember 1. Nie jestem pewien co do embera 2. Nie pracowałam w ember przez jakiś czas. Ale myślę, że tak nie będzie, odkąd kontrolerzy zostaną zastąpieni na korzyść elementów rutowanych w ember 2. Nie jestem nawet pewien, czy ruszyli w tym kierunku. Ale byłoby wspaniale, gdybyś mógł zaktualizować tutaj, gdybyś znalazł alternatywę. – blessenm
Nie, miałem na myśli, 'controllerFor' jest publiczną metodą' Ember.Route', w Ember 2 jest również prywatną statyczną metodą 'Ember', ale nie sądzę, że jest to metoda' Ember.Component ', nawet prywatne. Innymi słowy, działałoby to z trasy, ale nie ze składnika, ponieważ 'controllerFor' nie jest tam dostępny. – Huafu
Spróbuj tego.
export default Ember.Route.extend({
routeName: null,
beforeModel(transition){
//alert(JSON.stringify(transition.targetName) + 'typeof' + typeof transition.targetName);
this.set('routeName', transition.targetName);
},
model(){
// write your logic here to determine which one to set 'active' or pass the routeName to controller or component
}
`
W rzeczywistości, nie trzeba stosować aktywną klasę sam. Pomocnik link-to
zrobi to za Ciebie.
Zobacz here:
{{link-to}}
zastosuje nazwę klasy CSS z „aktywny”, gdy aktualna trasa w aplikacji odpowiada dostarczonego routeName. Na przykład, jeśli aktualna trasa danej aplikacji jest 'photoGallery.recent' następujące wykorzystanie{{link-to}}
:
{{#link-to 'photoGallery.recent'}}
Great Hamster Photos
{{/link-to}}
spowoduje
<a href="/hamster-photos/this-week" class="active">
Great Hamster Photos
</a>
Takie świetne użycie 'link-to'! –
Wykorzystując spostrzeżenia z odpowiedzi @ maharaja-santhira, można pomyśleć o ustawieniu właściwości routeName na kontrolerze docelowym do użycia np. W szablonie celu. W ten sposób nie ma potrzeby definiowania logiki w wielu lokalizacjach, a tym samym ponownego użycia kodu. Oto przykład jak to osiągnąć:
// app/routes/application.js
export default Ember.Route.extend({
...
actions: {
willTransition(transition) {
let targetController = this.controllerFor(transition.targetName);
set(targetController, 'currentRouteName', transition.targetName);
return true;
}
}
});
Definiowanie tego willTransition
działania w trasie Aplikacja pozwala na propagowanie obecną nazwę trasy do dowolnego miejsca w aplikacji. Należy zauważyć, że kontroler docelowy zachowa ustawienie właściwości currentRouteName
nawet po przejściu na inną trasę. W razie potrzeby wymaga to ręcznego czyszczenia, ale może być dopuszczalne w zależności od implementacji i użycia.
- 1. Symfony2 Dostęp do zmiennych trasy
- 2. Używanie nameof do uzyskania nazwy aktualnej metody
- 3. Dostęp do parametrów trasy w gałązce Szablon
- 4. Trasy silnika w aplikacji kontrolera
- 5. Dostęp do kontrolera FXML klasa
- 6. Emberjs - Jak uzyskać dostęp do aktualnego stanu lub nazwy trasy w RC1?
- 7. Różne trasy tego samego komponentu
- 8. Dodawanie niestandardowej trasy do kontrolera Zend REST
- 9. Jak uzyskać dostęp do aplikacjiContext z kontrolera
- 10. Dostęp do kontrolera widoku kontenera
- 11. Wysyłanie działań z komponentu do trasy w ember.js
- 12. AngularJS: Odczytaj parametr trasy z kontrolera
- 13. Uzyskiwanie aktualnej nazwy klasy, w tym pakietu
- 14. Generowanie trasy Url do MVC działania kontrolera z WebAPI
- 15. Routing trasy do nazwy użytkownika zamiast id
- 16. Jak uzyskać dostęp do metody z app.component z innego komponentu?
- 17. Składnia do trasy Railsów form_for do kontrolera niestandardowego
- 18. Jak uzyskać dostęp do właściwości "key" z komponentu reactjs
- 19. VueJS dziecku dostęp komponentu nadrzędnego
- 20. Dostęp do UserProfile ze kontrolera MVC 4
- 21. Dostęp do zdarzenia onChange z komponentu potomnego (React/Redux)
- 22. Routing z i bez nazwy kontrolera w ASP.NET MVC 4
- 23. Otrzymywanie nazwy kontrolera od samego kontrolera
- 24. Dostęp nazwanych Trasy w Rakefile
- 25. Jak uzyskać dostęp do kontrolera widoku super?
- 26. Programowalny dostęp do wbudowanego kontrolera wentylatora laptopa?
- 27. Dostęp do "bieżącego" zakresu od kontrolera "root"
- 28. Dyrektywy AngularJS przypisują dostęp do kontrolera
- 29. Zadzwoń do asp.net klasy członkowskiej z kontrolera lub warstwy usługi?
- 30. symfony2 uzyskiwanie parametrów trasy (argumenty kontrolera względem żądania)
Może to this.controllerFor ('application'). Get ('currentRouteName') – blessenm
@blessenm yep, to jest właśnie to, co chcę – jax
Ember zrobi to za Ciebie. po prostu użyj linku-do na twoich zakładkach – killebytes