Atualmente, tenho uma página Angular.js que permite pesquisar e exibir resultados. O usuário clica em um resultado da pesquisa e depois no botão Voltar. Quero que os resultados da pesquisa sejam exibidos novamente, mas não consigo descobrir como acionar a pesquisa para executar. Aqui está o detalhe:
- Minha página Angular.js é uma página de pesquisa, com um campo de pesquisa e um botão de pesquisa. O usuário pode digitar manualmente uma consulta e pressionar um botão e a consulta ajax é acionada e os resultados são exibidos. Eu atualizo o URL com o termo de pesquisa. Isso tudo funciona bem.
- O usuário clica em um resultado da pesquisa e é levado para uma página diferente - que também funciona bem.
- O usuário clica no botão Voltar e volta à minha página de pesquisa angular, e o URL correto é exibido, incluindo o termo de pesquisa. Tudo funciona bem.
- Eu vinculei o valor do campo de pesquisa ao termo de pesquisa no URL, para que ele contenha o termo de pesquisa esperado. Tudo funciona bem.
Como faço para executar a função de pesquisa novamente sem que o usuário precise pressionar o "botão de pesquisa"? Se fosse jquery, eu executaria uma função na função documentready. Não consigo ver o equivalente ao Angular.js.
$routepProvider
? Use-o para conectar-se ao serviço em seu aplicativo que fornece dados para os resultados da pesquisa. Não pense emdocument.ready
termos como no jQuery. Difícil de ajudar muito, sem seing como você Pesquisa Wired-se actualmenteRespostas:
Por um lado, como @ Mark-Rajcok disse que você pode simplesmente se dar bem com a função interna privada:
Além disso, você pode dar uma olhada na diretiva ng-init . A implementação será muito parecida com:
Mas tome cuidado com isso, pois a documentação angular implica (desde a v1.2) NÃO usar
ng-init
para isso. No entanto, depende da arquitetura do seu aplicativo.Eu usei
ng-init
quando queria passar um valor do back-end para o aplicativo angular:fonte
myCtrl
controlador é criado e executado.<div smth on-init="doWhatever()">
. Claro que depende de um certo caso de uso.Tente isso?
fonte
Eu nunca consegui
$viewContentLoaded
trabalhar para mim eng-init
realmente só deveria ser usado em umng-repeat
(de acordo com a documentação), e também chamar uma função diretamente em um controlador pode causar erros se o código se basear em um elemento que ainda não foi definido. .Isto é o que eu faço e funciona para mim:
A menos que você esteja usando
ui-router
. Então é:fonte
$scope.$on('$routeChangeSuccess'
aciona toda vez que os parâmetros no URL são alterados (via,$location
por exemplo) e, portanto, você pode usar just$scope.$on('$locationChangeSuccess'
. Se você precisar de algum gatilho no carregamento / recarregamento da página, use o$scope.$watch('$viewContentLoaded'
que foi sugerido aqui. Ele não dispara durante as alterações dos parâmetros de URL.fonte
$scope
e, em vez disso, trabalharmos comthis
.A solução de Dimitri / Mark não funcionou para mim, mas o uso da função $ timeout parece funcionar bem para garantir que seu código seja executado somente após a marcação ser processada.
Espero que ajude.
fonte
Você pode fazer isso se quiser assistir o objeto DOM viewContentLoaded mudar e, em seguida, fazer alguma coisa. O uso de $ scope. $ on também funciona, mas de maneira diferente, especialmente quando você tem um modo de página no seu roteamento.
fonte
Você pode usar o objeto $ window do angular:
fonte
Outra alternativa:
(via https://stackoverflow.com/a/30258904/148412 )
fonte
Outra alternativa, se você tiver um controlador específico para essa página:
fonte
Ao usar $ routeProvider, você pode resolver .state e inicializar seu serviço. Isto é, você irá carregar o Controller e o View, apenas após resolver o seu Serviço:
rotas ui
Serviço
fonte
Dmitry Evseev achou a resposta bastante útil.
Caso 1: Usando angularJs sozinho:
Para executar um método no carregamento da página, você pode usar
ng-init
o modo de exibição e declarar init no controller, tendo dito que o uso da função mais pesada não é recomendado, conforme os documentos angulares no ng-init :HTML:
Controlador:
Atenção : Não use este controlador para outra visualização destinada a uma intenção diferente, pois isso também fará com que o método de pesquisa seja executado lá.
Caso 2: Usando o Ionic:
O código acima funcionará, apenas certifique-se de que o cache de exibição esteja desativado da seguinte
route.js
maneira:route.js
Espero que isto ajude
fonte
cache: false
fez por mim - obrigado!Eu tive o mesmo problema e apenas esta solução funcionou para mim (ela executa uma função depois que um DOM completo foi carregado). Eu uso isso para rolar para ancorar depois que a página foi carregada:
fonte
Você pode salvar os resultados da pesquisa em um serviço comum que pode ser usado de qualquer lugar e não é limpo quando navegar para outra página e, em seguida, você pode definir os resultados da pesquisa com os dados salvos ao clicar no botão Voltar
Para o seu backbutton
fonte
chamar métodos iniciais dentro da função de auto-inicialização.
fonte