Eu tenho uma função que desejo chamar após o conteúdo da página ser carregado. Eu li sobre $ viewContentLoaded e não funciona para mim. Estou procurando algo como
document.addEventListener('DOMContentLoaded', function () {
//Content goes here
}, false);
A chamada acima não funciona para mim no controlador AngularJs.
Respostas:
De acordo com a documentação de $ viewContentLoaded , ele deveria funcionar
$viewContentLoaded
evento emitido significa que, para receber esse evento, você precisa de um controlador pai comoDe
MainCtrl
você pode ouvir o eventoVerifique a demonstração
fonte
ng-repeat
várias diretivas aninhadas que gerarão HTML / Conteúdo com base em condições e loops complexos. A renderização continua por algum tempo, mesmo após o$viewContentLoaded
evento ser disparado. Como você pode garantir que todos os elementos foram totalmente renderizados e depois executar determinado código? Algum feedback?Angular <1.6.X
Angular> = 1.6.X
fonte
fixo - 06.06.2015
Use uma diretiva e o
ready
método do elemento angular da seguinte maneira:js
html
ou para aqueles que usam sintaxe de controlador como ...
O benefício disso é que você pode ser tão amplo ou granular com sua interface do usuário quanto desejar e remover a lógica DOM de seus controladores. Eu argumentaria que esta é a maneira angular recomendada .
Pode ser necessário priorizar esta diretiva caso você tenha outras diretivas operando no mesmo nó.
fonte
elem.ready( $scope.$apply( readyFunc( $scope )));
Alguma idéia de por que isso poderia ser? Talvez tenha ocorrido uma atualização para angular? Enfim - é uma abordagem elegante, se puder funcionar.attrs.onReady
, deve ser o que é agora. A outra questão era que eu estava chamando de funky ... ... o que recebo pela conversão de coffeescript da memória para JS.$timeout
; Você está criando explicitamente um addt. Nó DOM simplesmente para executar lógica não-dom; Só é reutilizável se esse método residir muito na hierarquia de escopo $, de modo que os escopos filhos o herdem; só acho que fica ruim na perspectiva do NG;$timeout(function() {})
ao redor doelem.ready()
. Caso contrário, estava lançando um$digest already in progress
erro. Mas enfim, obrigado uma tonelada! Eu tenho lutado com isso durante a última hora.Você pode chamá-lo diretamente adicionando
{{YourFunction()}}
após o elemento HTML.Aqui está um
Plunker Link
.fonte
Eu tive que implementar essa lógica ao lidar com gráficos do Google. o que eu fiz foi que no final do meu html dentro da definição do controlador eu adicionei.
e nessa função simplesmente chame sua lógica.
fonte
O método acima funcionou para mim
fonte
você pode chamar a versão javascript do evento onload em js angulares. esse evento ng-load pode ser aplicado a qualquer elemento dom, como div, span, body, iframe, img etc. A seguir está o link para adicionar o ng-load ao seu projeto existente.
download ng-load para js angulares
A seguir, é apresentado um exemplo para iframe, uma vez carregado, testCallbackFunction será chamado no controlador
EXEMPLO
JS
HTML
fonte
Se você estiver recebendo um erro $ digest já em andamento, isso pode ajudar:
fonte
A execução após o carregamento da página deve ser parcialmente satisfeita, definindo um ouvinte de evento para o evento de carregamento da janela
Dentro
module.run(function()...)
do angular, você terá todo o acesso à estrutura e dependências do módulo.Você pode
broadcast
eemit
eventos para pontes de comunicação.Por exemplo:
fonte
Eu estava usando
{{myFunction()}}
no modelo, mas depois encontrei outra maneira aqui usando$timeout
dentro do controlador. Pensei que iria compartilhar, funciona muito bem para mim.fonte
Se você deseja que determinado elemento seja completamente carregado, use ng-init nesse elemento.
por exemplo
<div class="modal fade" id="modalFacultyInfo" role="dialog" ng-init="initModalFacultyInfo()"> ..</div>
a função initModalFacultyInfo () deve existir no controlador.
fonte
Descobri que, se você tem visualizações aninhadas - $ viewContentLoaded é acionado para todas as visualizações aninhadas. Eu criei esta solução alternativa para encontrar o $ viewContentLoaded final. Parece funcionar bem para definir $ window.prerenderReady conforme exigido pelo Prerender (entra em .run () no app.js principal):
fonte
fonte
A solução que funciona para mim é a seguinte
O código do controlador é o seguinte
O código HTML é o seguinte
fonte
Eu uso
setInterval
para esperar o conteúdo carregado. Espero que isso possa ajudá-lo a resolver esse problema.fonte
setInterval
como solução em 2016 ?