2014-01-11 45 views

回答

21

虽然上面的每个人都已经很完美地回答了,但我发现了我在找的东西,但仍然看起来像是一个工作示例。

虽然理解,请在下面的例子AngularJS自动/手动引导可以帮助很多:

AngularJS:自动引导过程:

角初始化/白手起家时自动DOMContentLoaded事件或当angular.js脚本被下载到浏览器并且document.readyState被设置为完成。此时AngularJS查找ng-app指令。当找到ng-app指令时,Angular将:

  1. 加载与指令相关联的模块。

  2. 创建应用程序注入器。

  3. 编译从ng-app根元素开始的DOM。

该过程称为自动引导。

<html> 

    <body ng-app="myApp"> 
     <div ng-controller="Ctrl">Hello {{msg}}!</div> 
     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script> 
     <script> 
      var app = angular.module('myApp', []); 
      app.controller('Ctrl', function($scope) { 
       $scope.msg = 'Nik'; 
      }); 
     </script> 
    </body> 

</html> 

的jsfiddle:http://jsfiddle.net/nikdtu/ohrjjqws/

AngularJS - 手动自举:

,您可以手动使用angular.bootstrap()函数初始化您的角度应用。该函数将模块作为参数,并应在angular.element(document).ready()函数内调用。当DOM准备好进行操作时,会激发angular.element(document).ready()函数。

<html> 

    <body> 
     <div ng-controller="Ctrl">Hello {{msg}}!</div> 
     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script> 
     <script> 
      var app = angular.module('myApp', []); 
      app.controller('Ctrl', function($scope) { 
       $scope.msg = 'Nik'; 
      }); 
      //manual bootstrap process 
      angular.element(document).ready(function() { angular.bootstrap(document, ['myApp']); }); 
     </script> 
    </body> 

</html> 

的jsfiddle:http://jsfiddle.net/nikdtu/umcq4wq7/

注:

  1. 你不应该使用的NG-应用指令手动自举 您的应用程序时。

  2. 您不应该混淆自动和手动方式引导 您的应用程序。

  3. 定义模块,控制器,服务等手动 引导您的应用程序在上面的例子中定义。

参考:http://www.dotnettricks.com/books/angularjs/interview

+1

您提供了一些示例代码,但没有答案... – Krystian

+0

@Krystian:我留下了定义,因为在其他答案中已经很好地解释了定义。顺便说一句好的建议,我也添加了定义。可能现在这个答案可以以更合适的方式提供帮助。 –

49

Bootstrapping等同于初始化或启动您的Angular应用程序。有两种主要的方式来做到这一点。

首先是通过在HTML添加ng-app到一个元件,像这样自动自举:

<html ng-app="myApp"> 
... 
</html> 

第二是从JavaScript来引导,像这样,具有通过angular.module("myApp", []);创建应用后

angular.bootstrap(document, ['myApp']); 
+1

并回答最后一个问题:“这在下面的图形表示中出现在哪里?”这是在右边的Angular JS块中的所有活动......从DOM内容加载事件开始到动态DOM结束。 – Taylor

+0

手动引导是否有缺点?因为我阅读如下所述:angular.bootstrap不会即时创建模块。您必须创建任何自定义模块,然后再将它们作为参数传递 – sabari

9

ng-app指令指示页面的哪个部分(全部或部分,由你)是角应用程序的根。 Angular读取该根内的HTML并将其编译为内部表示。这个阅读和编译是自举过程。

手动引导是当您编写代码来执行引导过程而不是使用ng-app指令时。

18

添加到戴夫Swersky的答案(我是新来的角,以便纠正我,如果我错了):

下面的图片,从angularjs.org bootstrap tutorial拍摄。解释戴夫的表述。

enter image description here

的HTML,与NG-应用指令中的元素内,通过AngularJS编译。例如:然而

{{ 1 + 2 }} 

,加入了NG-应用指令:

​​

会使因为这

<body ng-app="module"> 
    <div> {{ 1 + 2 }} </div> 
</body> 

呈现这样的:

3 

这是因为ng-app“引导”了身体标记并告诉Angular创建内容的“内部表示”。内部表示当然是3。从教程:

“如果找到ng-app指令,那么Angular将编译DOM 将ng-app指令视为编译的根。这 允许你告诉它来治疗只是DOM的一部分作为角 应用。”

角还加载与NG-程序指令相关的模块(‘中的角教程组件’),创建应用注射器(用于依赖注入)。

6

角JS自动引导进程

AngularInit()被调用用于经由jqLit​​e准备功能自动引导捆扎第一角API。

  1. 就绪()称为上DOM准备
  2. angularInit()使用element.querySelectorAll()以下格式中的一个从就绪()
  3. 角初始化提取NG-app元素称为从DOM - “NG:应用程序','ng-app','x-ng-app','data-ng-app' Ex。
<body ng-app=ngAppDemo> 
     <div ng-controller="ngAppDemoController" > 
      I can add: {{a}} + {{b}} = {{ a+b }}   </div> 
    </body> 
ng-app="ngAppDemo" will be extracted. 
  • 使用正则表达式模块被提取,离。 module =“ngAppDemo”
  • finally bootstrap(..)被调用,从而创建全局注入器& rootcope和引导带角度应用程序。
  • 1

    从角NgModules页:

    import { NgModule }  from '@angular/core'; 
    import { BrowserModule } from '@angular/platform-browser'; 
    import { AppComponent } from './app.component'; 
    
    @NgModule({ 
        imports:  [ BrowserModule ], 
        declarations: [ AppComponent ], 
        bootstrap: [ AppComponent ] 
    }) 
    export class AppModule { } 
    

    最后,@ NgModule.bootstrap属性标识此AppComponent作为引导组件。当Angular启动应用程序时,它将AppComponent的HTML呈现放置在DOM中,位于index.html的元素标记内。

    引导在main.ts

    您可以通过自举在main.ts文件中的AppModule启动应用程序。

    Angular提供了多种针对多个平台的引导选项。本页面描述了两个选项,都针对浏览器。