O problema que estou encontrando pode ser tangencial, mas como o Google me levou a essa pergunta, isso pode ser apropriado. O problema é horrível para mim ao usar o roteador da interface do usuário, mas apenas quando tento atualizar a página com o botão de atualização do navegador. O aplicativo usa o roteador da interface do usuário com um estado abstrato pai e os estados filho fora do pai. Na run()
função do aplicativo , há um $state.go('...child-state...')
comando. O estado pai usa a resolve
e, a princípio, pensei que talvez um controlador filho esteja executando duas vezes.
Tudo está bem antes que o URL tenha o hash anexado.
www.someoldwebaddress.org
Depois que o URL for modificado pelo roteador da interface do usuário,
www.someoldwebaddress.org#/childstate
... e, em seguida, quando atualizo a página com o botão de atualização do navegador , o $stateChangeStart
acionador é acionado duas vezes e cada vez aponta para o childstate
.
O resolve
estado pai é o que está disparando duas vezes.
Talvez isso seja uma farsa; de qualquer maneira, isso parece eliminar o problema para mim: na área do código onde $stateProvider
é chamado pela primeira vez , verifique primeiro se o window.location.hash é uma string vazia. Se for, tudo é bom; caso contrário, defina o window.location.hash para uma sequência vazia. Então parece que as $state
únicas tentativas de ir a algum lugar uma vez e não duas.
Além disso, se você não deseja confiar no padrão do aplicativo run
e state.go(...)
, pode tentar capturar o valor do hash e usá-lo para determinar o estado filho em que estava antes da atualização da página e adicionar uma condição à área em seu código onde você define o state.go(...)
.
ng-app
e com autoinicialização). Verifique também se você conectou seu controlador a vários elementos (com ng-controller).