O caminho do local do AngularJs é alterado sem que todos os controladores sejam redefinidos
A versão curta da minha pergunta é: Como faço para alterar o URL sem precisar acionar a mudança de rota ou sem precisar executar todos os controladores na página exibida atualmente?
Detalhes:
Eu tenho um modelo que é exibido dentro do<ng-view>
que tem regiões regidas por 3 controladores. No topo da página eu tenho um mapa interativo. Quando você clica nas regiões que ele transmite, um clique e outro componente são capturados e exibe dados sobre essa região. Configuração realmente simples.
O que eu gostaria de fazer é permitir que meus usuários façam um link direto para o conteúdo. Então toda vez que alguém clica em um link, eu gostaria de mudar o URL que pode ser copiado e colado em outro navegador. Algum outro usuário poderia apenas clicar no link e ver o mesmo estado que o primeiro viu.
Atualmente mudo a localização com código semelhante a este:
$scope.$on('mapRegionClick', function($scope, regionCode) {
var url = generateURL(regionCode);
$scope.currentScope.$apply(function(){
$location.path(url);
});});
A URL é então apanhada no meu roteamento e o mapa mais os dados são exibidos corretamente. A desvantagem disso é que toda vez que eu clico no mapa e o URL muda, todo o template / view é regenerado. Como gerar o mapa é meio pesado, gostaria de acionar apenas uma alteração no controlador de apresentação de dados.
É possível? Como?
Eu poderia fazer alguma comunicação entre os controladores e atingir o meu objetivo, mas então eu não seria capaz de fazer links diretos.
PS: eu não quero usar$location.search()
ereloadOnSearch=false
. meus links têm que ser bonitos :)