Qual método devo usar para inicializar manualmente o meu AngularJS?

Eu vi o seguinte:

angular.bootstrap(document, ['TodoApp']); angular.bootstrap(angular.element("body")[0], ['TodoApp']); 

Também a documentação do AngularJS menciona isso que eu realmente não entendo.

  angular.element(document).ready(function() { angular.bootstrap(document); }); 

Existe alguma diferença entre esses methods? Em particular, qual é o último método dos documentos angulares? É melhor usar um do que o outro?

Eles são praticamente os mesmos, com algumas diferenças:


 angular.bootstrap(document, ['TodoApp']); 

Isso funcionará se você tiver seus scripts carregados no final da página (em vez de no header).

Caso contrário, o DOM não será carregado no momento da boot do aplicativo (não haverá nenhum modelo a ser compilado, as diretivas não terão nenhum efeito).

Este funciona: plnkr

Este não é: plnkr


 angular.bootstrap(angular.element("body")[0], ['TodoApp']); 

O mesmo que antes, usando o body como a raiz do aplicativo. Ele usa um seletor que não está disponível no jqLite, então você precisa ter o jQuery completo incluído no aplicativo.

Não tenho certeza qual é a vantagem de usar o body vez do document , mas provavelmente tem algo a ver com o teste e2e , conforme explicado neste comentário.

plknr


 angular.element(document).ready(function() { angular.bootstrap(document); }); 

Este, na verdade, aguarda que o DOM seja carregado, então funcionará mesmo se você include seus scripts no header.

Isto é basicamente o mesmo que o $(document).ready( do jQuery $(document).ready( , mas usando o jqLite do angular.element .


No último exemplo, nenhum módulo está sendo passado para a function de autoboot, provavelmente você precisará declarar seu módulo principal, a menos que seu aplicativo consista apenas em controladores no namespace global.

Então a última opção será como a seguinte, para ser semelhante aos outros dois:

 angular.element(document).ready(function() { angular.bootstrap(document, ['TodoApp']); }); 

plknr

Eu acho que na maioria das vezes a aposta mais segura é usar essa última abordagem.