2013-06-26 20 views
18

Więc dwa pytania.

  1. jaki sposób aplikacje kątowe uchwyt odświeżania strony, b/c z tego co słyszałem, $ rootScope zniszczyć() na odświeżenie i aplikacja pobiera ponownie uruchomić i re-config -ed, a ja zastanawiałem się, czy istnieje elegancki sposób na zachowanie $ rootScope bez konieczności przechowywania zmiennych $ rootScope jako ciągu znaków w pamięci masowej.

  2. Jeśli ładuję szablon na dyrektywie, która ładuje modal na stronie, jest możliwe, aby skonfigurować historię, aby nie nawigować, ale aby odwrócić otwarty mod. i ze względu na walidacje i takie, nie sądzę, że możliwe jest zaimplementowanie tej samej funkcji za pomocą href.

+0

Nie rozumiem twojego drugiego pytania. – John

+1

co próbuję powiedzieć, to, że odświeża aplikację, a zatem wszystkie moduły zostają zresetowane, czy istnieje usługa, która zachowuje i nie jest niszczona? lub czy istnieje sposób na niezniszczalność aplikacji przez odświeżenie. – user2167582

+1

Jedyne sposoby, jakie mogę wymyślić to użycie localStorage lub zapisanie tych danych na serwerze, który ściąga podczas odwiedzania aplikacji. O ile mi wiadomo, nie ma na to sposobu Angular. – John

Odpowiedz

21

Jeśli URL są odwzorowywane z $routeProvider można przeładować kontroler powołując $route.reload(). To odświeża stronę bez niszczenia $ rootScope.
Mam utworzyć a plunker to show this. Kontroler liczy, ile razy strona została załadowana ponownie.

+1

czy istnieje sposób wyłączenia odświeżania przeglądarki, aby zezwolić na $ route.reload? – user2167582

+0

Czy chodzi o wyłączenie odświeżania strony? Nie sądzę, żeby to było całkowicie możliwe.Spójrz na to pytanie z prośbą o to samo http://stackoverflow.com/questions/2482059/disable-f5-and-browser-refresh-using-javascript – pasine

+1

@notme: To nie działało dla mnie Właśnie dodałem \t $ scope.reloadCtrl = function() { \t console.log ("ponowne ładowanie ..."); \t \t $ route.reload(); \t} to nie zostało zwolnione? –

11

Prawdopodobnie nie da się zachować żadnej zmiennej javascript poprzez przeładowanie strony, a $ rootScope jest po prostu zmienną javascript.

Wydaje się jednak, że to, czego szukasz, jest sposobem na to, aby Twoja aplikacja "zaczynała się od tego samego punktu", w którym była po przeładowaniu strony. Polecam zapoznanie się z pojęciem stanu. Każda aplikacja może być postrzegana jako zbiór stanów i przejść między nimi. Każda interakcja użytkownika lub jakiekolwiek inne działanie w aplikacji zmienia stan aplikacji lub utrzymuje ją w tym samym stanie. Na przykład: kliknięcie linku użytkownika z listy użytkowników zmienia stan z "wyświetl listę użytkowników" na "wyświetl szczegóły użytkownika dla użytkownika o identyfikatorze = 213", klikając przycisk "Edytuj" w "zobacz szczegóły użytkownika dla użytkownika o identyfikatorze = 213 "zmienia stan na" edytuj użytkownika o id = 213 ". A gdy zachodzą te przejścia, zmienne są przypisywane wartościom, zmianie widoków, wysyłanym żądaniom itd.

Dwie rzeczy, które są potrzebne do rozwiązania problemu "zacznij od tego samego punktu" to menedżer stanu i sposób serializowania i przechowywania stany.

Jako menedżer stanu oprócz podstawowej dyrektywy $ router można użyć ui-router. Jeśli chodzi o sposób serializowania i przechowywania stanu za pomocą ui-router robi to poprzez adres URL. Zaletą routera ui jest to, że pozwala on na zagnieżdżanie stanów i jest ogólnie bardziej elastyczny.

ui-router posiada również rozwiązania dla Twojego drugiego pytania w swoim github wiki https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-open-a-dialogmodal-at-a-certain-state

2

Nie można użyć window.localstorage do zachowania zmiennych js? W ten sposób, jeśli użytkownik odświeży stronę poza aplikacją, możesz przeładować swoje wartości