它们大致相同,但有一些差异:
angular.bootstrap(document, ['TodoApp']);
如果您加载了脚本,这将起作用在该页的末尾(而不是在标题中)。
否则,在启动应用程序时将不会加载 DOM(不会编译任何模板,指令不会产生任何效果)。
这个有效:plnkr http://plnkr.co/edit/YC3bET2U3NWJGVeBnACw?p=preview
这个没有:plnkr http://plnkr.co/edit/CC67YoIbUGhdtcpjW2Nd?p=preview
angular.bootstrap(angular.element("body")[0], ['TodoApp']);
和之前一样,使用body
作为应用程序的根。它使用了 jqLite 中不可用的选择器,因此您需要有完整的 jQuery包含在应用程序中。
我不确定使用有什么好处body
反而document
,但可能与端到端测试,正如本节中所解释的comment https://github.com/karma-runner/karma/issues/422
plknr http://plnkr.co/edit/h61lHJRVCSmWG8nLZHEu?p=preview
angular.element(document).ready(function() {
angular.bootstrap(document);
});
这个其实等待 DOM被加载,因此即使您将脚本包含在标头中它也会工作。
这与jQuery的基本相同$(document).ready(
,但是使用jqLite
's angular.element
.
在最后一个示例中,没有模块被传递给引导函数,很可能您需要声明主模块,除非您的应用程序仅包含全局命名空间中的控制器。
因此,最后一个选项将如下所示,以便与其他两个选项类似:
angular.element(document).ready(function() {
angular.bootstrap(document, ['TodoApp']);
});
plknr http://plnkr.co/edit/AC0iJBQEJcRTd1LLfsn3?p=preview
我想大多数时候最安全的选择是使用最后一种方法。