2013-01-23 15 views
8

Krótka wersja mojego pytania brzmi: Jak zmienić adres URL bez konieczności wyzwalania zmiany trasy lub bez konieczności uruchamiania wszystkich kontrolerów na aktualnie wyświetlanej stronie?Zmiana ścieżki lokalizacji AngularJs bez resetowania wszystkich kontrolerów

Szczegóły:

Mam szablon, który jest wyświetlany wewnątrz <ng-view> że ma obszary regulowane przez 3 kontrolerów. Na samej górze strony mam interaktywną mapę. Po kliknięciu regionów, które emitują kliknięcie, inny komponent odbiera i wyświetla dane o tym regionie. Naprawdę prosta konfiguracja.

Chciałbym umożliwić moim użytkownikom precyzyjne połączenie z treścią. Za każdym razem, gdy ktoś kliknie link, chciałbym zmienić URL, który można skopiować i wkleić do innej przeglądarki. Jakiś inny użytkownik mógł po prostu kliknąć łącze i zobaczyć ten sam stan, który zobaczył pierwszy.

Obecnie zmienić lokalizację z kodu podobnego do tego:

$scope.$on('mapRegionClick', function($scope, regionCode) { 
    var url = generateURL(regionCode); 

    $scope.currentScope.$apply(function(){ 
     $location.path(url); 
    });}); 

URL jest następnie odebrać w moim routingu i map oraz danych wyświetlany prawidłowo. Minusem tego jest to, że za każdym razem, gdy klikam na mapę i zmiany adresu URL, cały szablon/widok jest regenerowany. Ponieważ generowanie mapy jest dość ciężkie, chciałbym wywołać tylko zmianę kontrolera przedstawiającego dane.

Czy to możliwe? W jaki sposób?

Mogę wykonać jakąś komunikację między kontrolerami i osiągnąć mój cel, ale wtedy nie będę w stanie wykonać dokładnego połączenia.

PS: Nie chcę używać $location.search() i reloadOnSearch=false. moje linki muszą być ładne :)

+0

czy próbowałeś wstawić mapę poza 'ng-view' i połączyć jej kontroler do tego, który jest dołączony do trasy przy użyciu usługi wspólnej? – akonsu

+0

Chodzi o to, że potrzebuję, aby mapa znajdowała się wewnątrz 'ng-view' dla tego konkretnego szablonu, ponieważ inne części strony używają innych szablonów, w których mapa nie jest ich częścią. – Ralphz

+0

To wielka szkoda, że ​​kątowe nie zapewnia czystego, gotowego do wykonania sposobu. Uwielbiam kanciasty, ale z tego powodu wolałem Embera w jednym z moich projektów. –

Odpowiedz

9

Brzmi, jakbyś nie chciał korzystać z usługi $route.

Usługa $route została zaprojektowana do ponownego ładowania kontrolerów, dzięki czemu nie ma różnicy między nawigowaniem do adresu URL a odświeżaniem adresu URL. Robimy to, wykonując pełne przeładowanie przy każdej zmianie adresu URL. Jest to zamierzone.

Brzmi jak Twój przypadek użycia, nie powinien używać $route, tylko $location i ng-include.

Powiązane problemy