我应该使用哪种方法来手动引导我的AngularJS?

我看到以下几点:

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

另外AngularJS文档提到了这个我不是很了解。

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

这些方法有什么区别? 特别是Angular文档的最后一个方法是什么? 一个比另一个更好用吗?

他们大致相同,有一些不同之处:


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

这将工作,如果你有你的脚本加载在页面的结尾 (而不是在标题)。

否则,在引导应用程序的时候不会加载DOM(不会有任何要编译的模板,这些指令不会有任何影响)。

这个工程: plnkr

这个不是: plnkr


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

与以前一样,使用body作为应用程序的根。 它使用了jqLit​​e中没有的select器,所以你需要在应用程序中包含完整的jQuery

我不确定使用body替代document有什么好处,但可能与e2etesting有关 ,如本评论中所述

plknr


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

这个实际上是等待DOM被加载的,所以即使你在头文件中包含了你的脚本,它也可以工作。

这与jQuery的$(document).ready(基本相同,但是使用jqLiteangular.element


在最后一个例子中,没有模块被传递到引导函数,很可能你需要声明你的主模块,除非你的应用只包含在全局命名空间的控制器上。

所以最后一个选项将如下所示,以便与其他两个类似:

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

plknr

我想大多数时候最安全的赌注是使用最后一种方法。