Obecnie mam stronę Angular.js, która umożliwia wyszukiwanie i wyświetlanie wyników. Użytkownik klika wynik wyszukiwania, a następnie klika przycisk Wstecz. Chcę, aby wyniki wyszukiwania były ponownie wyświetlane, ale nie mogę ustalić, jak uruchomić wyszukiwanie. Oto szczegół:
- Moja strona Angular.js to strona wyszukiwania z polem wyszukiwania i przyciskiem wyszukiwania. Użytkownik może ręcznie wpisać zapytanie i nacisnąć przycisk. Zostanie uruchomione zapytanie ajax, a wyniki zostaną wyświetlone. Aktualizuję adres URL za pomocą wyszukiwanego hasła. To wszystko działa dobrze.
- Użytkownik klika wynik wyszukiwania i zostaje przeniesiony na inną stronę - to też działa dobrze.
- Użytkownik klika przycisk Wstecz i wraca do mojej kątowej strony wyszukiwania. Wyświetlany jest prawidłowy adres URL, w tym wyszukiwane hasło. Wszystko działa dobrze.
- Powiązałem wartość pola wyszukiwania z wyszukiwanym terminem w adresie URL, więc zawiera on oczekiwany termin wyszukiwania. Wszystko działa dobrze.
Jak sprawić, by funkcja wyszukiwania uruchomiła się ponownie bez konieczności naciskania przez użytkownika przycisku wyszukiwania? Gdyby to była jquery, uruchomiłbym funkcję w funkcji tworzenia dokumentów. Nie widzę odpowiednika Angular.js.
$routepProvider
? Użyj go, aby połączyć się z usługą w aplikacji, która zapewnia dane dla wyników wyszukiwania. Nie myśl wdocument.ready
kategoriach jQuery. Trudno wiele pomóc, nie widząc sposobu, w jaki obecnie przeprowadziłeś wyszukiwanieOdpowiedzi:
Z jednej strony, jak powiedział @ Mark-Rajcok, możesz po prostu uciec od prywatnej funkcji wewnętrznej:
Możesz także zapoznać się z dyrektywą ng-init . Realizacja będzie podobna do:
Ale uważaj na to, ponieważ dokumentacja kątowa sugeruje (od wersji 1.2), aby NIE używać
ng-init
do tego celu. Jednak imo zależy od architektury Twojej aplikacji.Użyłem,
ng-init
gdy chciałem przekazać wartość z zaplecza do aplikacji kątowej:źródło
myCtrl
tworzony jest nowy kontroler i uruchamiany.<div smth on-init="doWhatever()">
. Oczywiście zależy to od konkretnego przypadku użycia.Spróbuj tego?
źródło
Nigdy nie mógłbym dostać się
$viewContentLoaded
do pracy ing-init
powinienem być używany tylko wng-repeat
(zgodnie z dokumentacją), a także wywołanie funkcji bezpośrednio w kontrolerze może powodować błędy, jeśli kod opiera się na elemencie, który nie został jeszcze zdefiniowany .Oto co robię i działa dla mnie:
Chyba że używasz
ui-router
. To jest:źródło
$scope.$on('$routeChangeSuccess'
odpala za każdym razem, gdy zmieniają się parametry w adresie URL ($location
na przykład przez), dzięki czemu można użyć just$scope.$on('$locationChangeSuccess'
. Jeśli potrzebujesz jakiegoś wyzwalacza przy ładowaniu / ładowaniu strony, możesz użyć$scope.$watch('$viewContentLoaded'
zgodnie z sugestią tutaj. Nie będzie uruchamiany podczas zmiany parametrów adresu URL.źródło
$scope
a zamiast tego pracujemy zthis
.Rozwiązanie Dimitri / Mark nie działało dla mnie, ale wydaje się, że użycie funkcji $ timeout działa dobrze, aby upewnić się, że kod działa tylko po renderowaniu znaczników.
Mam nadzieję, że to pomoże.
źródło
Możesz to zrobić, jeśli chcesz obejrzeć obiekt DOM viewContentLoaded w celu zmiany, a następnie zrobić coś. użycie $ scope. $ on działa również, ale inaczej, szczególnie gdy masz jeden tryb stronicowania na swoim routingu.
źródło
Możesz użyć obiektu $ window angulara:
źródło
Inna alternatywa:
(przez https://stackoverflow.com/a/30258904/148412 )
źródło
Jeszcze jedna alternatywa, jeśli masz kontroler specyficzny dla tej strony:
źródło
Korzystając z $ routeProvider, możesz rozwiązać na .state i uruchomić swoją usługę. Oznacza to, że załadujesz kontroler i widok, dopiero po rozwiązaniu usługi:
trasy-ui
Usługa
źródło
Odpowiedź Dmitrija Evseeva była dość przydatna.
Przypadek 1: Używanie samego angularJs:
Aby wykonać metodę przy ładowaniu strony, możesz użyć
ng-init
w widoku i zadeklarować metodę init w kontrolerze, powiedząc , że użycie cięższej funkcji nie jest zalecane, zgodnie z Angular Docs na ng-init :HTML:
Kontroler:
Ostrzeżenie: nie używaj tego kontrolera do innego widoku przeznaczonego dla innej intencji, ponieważ spowoduje to również wykonanie tam metody wyszukiwania.
Przypadek 2: Korzystanie z Ionic:
powyższy kod będzie działał, po prostu upewnij się, że pamięć podręczna widoku jest wyłączona w
route.js
:route.js
Mam nadzieję że to pomoże
źródło
cache: false
zrobiłem to dla mnie - dzięki!Miałem ten sam problem i tylko to rozwiązanie działało dla mnie (uruchamia funkcję po załadowaniu pełnego DOM). Używam tego do przewijania w celu zakotwiczenia po załadowaniu strony:
źródło
Możesz zapisać wyniki wyszukiwania we wspólnej usłudze, z której można korzystać z dowolnego miejsca i nie usuwa się po przejściu do innej strony, a następnie można ustawić wyniki wyszukiwania za pomocą zapisanych danych dla kliknięcia przycisku Wstecz
Dla twojego przycisku
źródło
wywoływać metody początkowe w ramach funkcji samodzielnej inicjalizacji.
źródło