2013-01-23 11 views
8

La versione breve della mia domanda è: Come cambio l'URL senza dover attivare la modifica del percorso o senza dover eseguire tutti i controller sulla pagina attualmente visualizzata?Cambiamento del percorso di posizione di AngularJs senza reimpostare tutti i controller

Dettagli:

ho un modello che viene visualizzato all'interno del <ng-view> che ha regioni governate da 3 controllori. Nella parte superiore della pagina ho una mappa interattiva. Quando fai clic sulle regioni, trasmette un clic e un altro componente lo preleva e visualizza i dati su questa regione. Installazione davvero semplice.

Quello che mi piacerebbe fare è consentire ai miei utenti di collegarsi profondamente al contenuto. Quindi ogni volta che qualcuno clicca su un link mi piacerebbe cambiare l'URL che può essere copiato e incollato su un altro browser. Qualche altro utente potrebbe semplicemente fare clic sul link e vedere lo stesso stato visto dal primo.

Attualmente posso cambiare la posizione con il codice simile a questa:

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

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

L'URL viene poi raccolto nel mio percorso e la mappa più dati vengono visualizzati correttamente. Lo svantaggio di questo è che ogni volta che clicco sulla mappa e l'URL cambia l'intero modello/vista viene rigenerata. Perché generare la mappa è un po 'pesante vorrei attivare solo una modifica ai dati che presentano il controller.

È possibile? Come?

Potrei fare alcune comunicazioni tra i controller e raggiungere il mio obiettivo, ma poi non sarei in grado di fare collegamenti profondi.

PS: Non voglio usare $location.search() e reloadOnSearch=false. i miei collegamenti devono essere belli :)

+0

hai provato a mettere la mappa al di fuori della 'ng-view' e collegare il suo controller a quello che è collegato alla rotta usando un servizio condiviso? – akonsu

+0

la cosa è che ho bisogno che la mappa sia all'interno di 'ng-view' per questo modello particolare perché altre parti del sito usano altri modelli in cui la mappa non fa parte di essi. – Ralphz

+0

È un grosso peccato che l'angolare non offra un modo semplice e pulito per farlo. Adoro l'angolare, ma questa è la ragione per cui ho preferito Ember in uno dei miei progetti. –

risposta

9

Suoni come se non si desidera utilizzare il servizio $route.

Il servizio $route è progettato per ricaricare i controller in modo che non vi sia alcuna differenza tra la navigazione verso un URL e l'aggiornamento dell'URL. Lo facciamo facendo una ricarica completa su ogni cambio di URL. Questo è intenzionale.

Suona come il tuo caso d'uso, non deve essere utilizzato $route, solo $location e ng-include.

Problemi correlati