AngularJS达成原理,职业规律详解

 个人以为,要很好的驾驭AngularJS的运维机制,本领尽恐怕防止掉到坑里面去。在那篇小说中,笔者将依赖网络的质感和团结的掌握对AngularJS的在开发银行后,每一步都做了些什么,做叁个相比较清楚详细的辨析。
    
首先上一小段代码(index.html),结合代码大家来拜见,angular一步一步都做了些什么。

   
 个人以为,要很好的知情AngularJS的运维机制,才具尽量制止掉到坑里面去。在那篇文章中,笔者将依照英特网的材质和友爱的通晓对AngularJS的在起步后,每一步都做了些什么,做二个比较清楚详细的分析。
   
 首先上一小段代码(index.html),结合代码大家来拜谒,angular一步一步都做了些什么。

个人认为,要很好的知晓AngularJS的运维机制,技艺尽量防止掉到坑里面去。在那篇小说中,作者将依据网络的素材和和气的精晓对AngularJS的在运行后,每一步都做了些什么,做一个相比较清楚详细的分析。
   
 首先上一小段代码(index.html),结合代码我们来寻访,angular一步一步都做了些什么。

AngularJS的基本点组成都部队分是:

<!doctype html>
<html ng-app>
 <head>
 <script src="angular.js"></script>
 </head>
 <body>
 <png-init=" name='World' ">Hello {{name}}!</p>
 </body> 
</html>
<!doctype html>  <html ng-app>    <head>      <script src="angular.js"></script>    </head>    <body>      <png-init=" name='World' ">Hello {{name}}!</p>    </body>   </html>

澳门葡京 1

  • 启动(startup) – 展示“hello world!”
  • 奉行期(runtime) – AngularJS 施行期大概浏览
  • 澳门葡京 ,功用域(scope) – 视图和调节器的集结区
  • 调控器(controller) – 应用的作为
  • 模型(model) – 应用的数码
  • 视图(view) – 用户能观望的
  • 指令(directives) – 扩展HTML语法
  • 过滤器(filters) – 数据当地化
  • 注入器(injector) – 聚合你的施用
  • 模块(module) – 配置注入器
  • $ – AngularJS的命名空间(namespace)

当您用浏览器去做客index.html的时候,浏览器依次做了如下一些专门的学问:

     当您用浏览器去做客index.html的时候,浏览器依次做了如下一些事情:

澳门葡京 2

启动

  1. 加载html,然后剖析成DOM;
  2. 加载angular.js脚本;
  3. AngularJS等待DOMContentLoaded事件的接触;
  4. AngularJS找寻ng-app指令,依照那个命令分明应用程序的分界;
  5. 利用ng-app中钦命的模块配置$injector;
  6. 使用$injector创建$compile服务和$rootScope;
  7. 行使$compile服务编写翻译DOM并把它链接到$rootScope上;
  8. ng-init指令对scope里面包车型大巴变量name实行赋值;
  9. 对表明式{{name}}实行交换,于是乎,突显为“Hello
    World!”    
  1. 加载html,然后深入分析成DOM;
  2. 加载angular.js脚本;
  3. AngularJS等待DOMContentLoaded事件的触及;
  4. AngularJS搜索ng-app指令,依据那些命令显著应用程序的界线;
  5. 动用ng-app中钦定的模块配置$injector;
  6. 使用$injector创建$compile服务和$rootScope;
  7. 应用$compile服务编写翻译DOM并把它链接到$rootScope上;
  8. ng-init指令对scope里面包车型地铁变量name举办赋值;
  9. 对表明式{{name}}进行替换,于是乎,展现为“Hello World!”     

澳门葡京 3

我们透过二个例子来说学运行那一个局地

  整个经过可以用那张图来代表:

  整个经过能够用那张图来表示:

<!doctype html>
<html ng-app>
  <head>
    <script src="angular.js"></script>
  </head>
  <body>
    <png-init=" name='World' ">Hello {{name}}!</p>
  </body> 
</html>
<!doctype html>  <html ng-app>    <head>      <script src="http://code.angularjs.org/angular-1.1.0.min.js"></script>    </head>    <body>      <p ng-init=" name='World' ">Hello {{name}}!</p>    </body>  </html>

澳门葡京 4

澳门葡京 5

澳门葡京 6

  1. 浏览器载入HTML,然后把它剖判成DOM树。
  2. 浏览器载入angular.js脚本。
  3. AngularJS等到DOMContentLoaded事件触发推行。
  4. AngularJS寻找ng-app命令,这么些命令提醒了应用程序的分界。
  5. 使用ng-app中内定的模块来布署注入器($injector)。
  6. 注入器($injector)是用来创制“编写翻译服务($compile
    service)”和“根效率域($rootScope)”的。
  7. 编写翻译服务($compile
    service)是用来编写翻译DOM树并把它链接到根作用域($rootScope)的,这里的根功效域就是html。
  8. ng-init命令将“World”赋给成效域里的name这几个变量。
  9. 作用域中的name与页面上的{{name}}绑定,整个表明式产生了“Hello
    World”。

 好了,通过上边的事例大家掌握了AngularJS是何许一步一步渲染出三个页面的。那么它又是什么和浏览器的平地风波回路来交互的啊?或然说是如何跟用户来交互的吗?粗略来说,主要分为两个阶段:

AngularJS达成原理,职业规律详解。   
 好了,通过下边包车型地铁例证大家领略了AngularJS是什么一步一步渲染出三个页面包车型大巴。那么它又是怎样和浏览器的风浪回路来交互的呢?也许说是怎么着跟用户来交互的吧?粗略来说,首要分为多个品级:
  1.
 浏览器的风云回路向来等候着事件的触发,事件包含用户的相互操作、按时事件依然网络事件(如服务器的响应等);
  2.
 即使有事件触发,就能够进去到Javascript的context中,一般通过回调函数来修改DOM;
  3.  等到回调函数推行实现之后,浏览器又依照新的DOM来渲染新的页面。
     正如上边一张图所示,交互进程首要由几个巡回组成:
澳门葡京 7
     
   
 AngularJS修改了相似的Javascript工作流,並且提供了它本身的事件管理机制。那样就把Javascript的context分隔成两部分,一部分是原生的Javascript的context,另一有个别是AngularJS的context。唯有处在AngularJS的context中的操作手艺享用到Angular的data-binding、exception
handling、property
watching等劳务,但是对于外来者(如原生的Javascript操作、自定义的事件回调、第三方的库等)Angular也不是一律不接见,可以应用AngularJS提供的$apply()函数将那么些外来者包进AngularJS的context中,让Angular感知到他们发生的成形。
     接下来,让大家一齐来拜候相互进程中的那些循环是怎么工作的?
  1.
 率先,浏览器会一向处于监听状态,一旦有事件被触发,就能够被加到三个event
queue中,event queue中的事件会一个七个的施行。
  2.  event
queue中的事件一经是被$apply()包起来的话,就能进来到AngularJS的context中,这里的fn()是大家愿目的在于AngularJS的context中推行的函数。
  3.
 AngularJS将进行fn()函数,平时状态下,那几个函数会改换使用的少数状态。
  4.
 然后AngularJS会步入到由八个小循环组成的$digest循环中,贰个巡回是用来拍卖$evalAsync队列(用来schedule一些要求在渲染视图以前管理的操作,日常经过set提姆eout(0)完结,速度会相当的慢,恐怕汇合世视图抖动的主题材料)的,多少个循环是管理$watch列表(是一对表达式的聚众,一旦有改观产生,那么$watch函数就能够被调用)的。$digest循环会一贯迭代知道$evalAsync队列为空并且$watch列表也为空的时候,即model不再有任何变动。
  5.
 一旦AngularJS的$digest循环甘休,整个实践就可以相差AngularJS和Javascript的context,紧接着浏览器就能把数量变动后的视图重新渲染出来。

澳门葡京 8

执行期

  1. 
浏览器的平地风波回路一向等候着事件的触发,事件包罗用户的相互操作、定期事件也许网络事件(如服务器的响应等);

     接下来,我们依旧结合代码来解析一下:

澳门葡京 9

浏览器的平地风波机制:

  2. 
例如有事件触发,就能够走入到Javascript的context中,一般经过回调函数来修改DOM;

<!doctype html>  <html ng-app>    <head>      <script src="angular.js"></script>    </head>    <body>      <input ng-model="name">      <p>Hello {{name}}!</p>    </body>   </html>

     当您用浏览器去拜访index.html的时候,浏览器依次做了如下一些业务:

  1. 浏览器的伊夫nt
    loop等待事件的触发。所谓事件包蕴用户的互相操作、定时事件、大概网络事件(服务器的响应)。
  2. 事件触发后,要是有绑定事件回调函数,那么此函数就能够被试行。此时会进来Javascript上下文。平常回调用来修改DOM结构。
  3. 假如回调试行达成,浏览器就能相差Javascript上下文,况且依据DOM的修改重新渲染视图。

  3.  等到回调函数实践实现之后,浏览器又遵照新的DOM来渲染新的页面。

   
 这段代码和上一段代码独一的差距正是有了多个input来接收用户的输入。在用浏览器去做客这些html文件的时候,input上的ng-model指令会给input绑上keydown事件,何况会给name变量提议二个$watch来接受变量值更改的打招呼。在相互阶段首要会产生以下一密密麻麻事件:
  1.
 当用户按下键盘上的某一个键的时候(举例说A),触发input上的keydown事件;
  2.
 input上的吩咐察觉到input里值的变迁,调用$apply(“name=‘A’”)更新处于AngularJS的context中的model;
  3.  AngularJS将’A’赋值给name;
  4.
 $digest循环初步,$watch列表检验到name值的成形,然后布告{{name}}表明式,更新DOM;
  5.
 退出AngularJS的context,然后退出Javascript的context中的keydown事件;
  6.  浏览珍视新渲染视图。

  1. 加载html,然后分析成DOM;
  2. 加载angular.js脚本;
  3. AngularJS等待DOMContentLoaded事件的触发;
  4. AngularJS找出ng-app指令,依据那么些命令鲜明应用程序的疆界;
  5. 使用ng-app中内定的模块配置$injector;
  6. 使用injector创建injector创建
    compile服务和$rootScope;
  7. 运用compile服务编写翻译DOM并把它链接到compile服务编写翻译DOM并把它链接到
    rootScope上;
  8. ng-init指令对scope里面包车型客车变量name进行赋值;
  9. 对表明式{{name}}实行轮换,于是乎,呈现为“Hello World!”     

而AngularJS通过接纳自个儿的伊芙nt
loop,更改了思想的Javascript专门的学业流。那使得Javascript的实践被分为原生部分和富有AngularJS实践上下文的一部分。唯有在AngularJS推行上下文中运转的操作,才具享受到AngularJS提供的数量绑定,十分管理,财富管理等成效和服务。你能够应用
$apply()方法,从平日Javascript上下文步向AngularJS推行上下文。记住,大多数动静下(如在调节器,服务中),$apply都早就被奉行过了。独有当你选取自定义的平地风波回调只怕是选取第三方类库的回调时,才供给团结执行$apply。

     正如下边一张图所示,交互进度首要由多少个巡回组成:

  最后,希望那篇博客能扶助大家更加好的精通AngularJS在私行干的政工。如有不适于的地点,请指正!

  整个经过能够用那张图来代表:

上边通过一个事例来上课如何兑现“将用户输入绑定到视图上”的职能。

澳门葡京 10


澳门葡京 11

<!doctype html>  <html ng-app>    <head>      <script src="http://code.angularjs.org/angular-1.1.0.min.js"></script>    </head>    <body>      <input ng-model="name">      <p>Hello {{name}}!</p>    </body>  </html>

AngularJS修改了相似的Javascript工作流,并且提供了它和煦的事件处理机制。那样就把Javascript的context分隔成两有些,一部分是原生的Javascript的context,另一有的是AngularJS的context。只有处在AngularJS的context中的操作本领享用到Angular的data-binding、exception
handling、property
watching等服务,可是对于外来者(如原生的Javascript操作、自定义的事件回调、第三方的库等)Angular也不是一概不接见,能够利用AngularJS提供的$apply()函数将那些外来者包进AngularJS的context中,让Angular感知到他们发生的变通。

   
 好了,通过地点的例证我们精晓了AngularJS是怎么着一步一步渲染出一个页面的。那么它又是何等和浏览器的风浪回路来交互的吧?可能说是怎么着跟用户来交互的啊?粗略来说,重要分为多少个等级:
  1.
 浏览器的平地风波回路一贯守候着事件的触发,事件包涵用户的相互操作、定期事件依然互连网事件(如服务器的响应等);
  2.
 即使有事件触发,就能够跻身到Javascript的context中,一般通过回调函数来修改DOM;
  3.  等到回调函数实施完成之后,浏览器又遵照新的DOM来渲染新的页面。
     正如上边一张图所示,交互进程首要由多少个巡回组成:
澳门葡京 12
     
   
 AngularJS修改了一般的Javascript工作流,况且提供了它和煦的事件管理机制。那样就把Javascript的context分隔成两有些,一部分是原生的Javascript的context,另一有的是AngularJS的context。独有处在AngularJS的context中的操作才干享受到Angular的data-binding、exception
handling、property
watching等劳动,可是对于外来者(如原生的Javascript操作、自定义的平地风波回调、第三方的库等)Angular也不是一概不接见,能够运用AngularJS提供的$apply()函数将那些外来者包进AngularJS的context中,让Angular感知到他俩发生的改动。
     接下来,让大家一并来寻访互相进度中的那多少个巡回是怎么职业的?
  1.
 第一,浏览器会一向处于监听状态,一旦有事件被触发,就能够被加到一个event
queue中,event queue中的事件会叁个三个的实施。
  2.  event
queue中的事件假若是被$apply()包起来的话,就能够进去到AngularJS的context中,这里的fn()是我们目的在于在AngularJS的context中施行的函数。
  3.
 AngularJS将实行fn()函数,平时境况下,那个函数会改造使用的一点状态。
  4.  然后AngularJS会走入到由几个小循环组成的digest循环中,四个巡回是用来拍卖digest循环中,叁个循环是用来处理evalAsync队列(用来schedule一些急需在渲染视图此前管理的操作,日常通过setTimeout(0)完毕,速度会相当的慢,大概会现出视图抖动的主题素材)的,二个循环是管理watch列表(是有个别表达式的集纳,一旦有退换产生,那么watch列表(是有的表明式的聚合,一旦有变动爆发,那么
watch函数就能够被调用)的。digest循环会一直迭代知道digest循环会一向迭代知道
evalAsync队列为空并且$watch列表也为空的时候,即model不再有任何变化。
  5.
 一旦AngularJS的$digest循环结束,整个试行就能够距离AngularJS和Javascript的context,紧接着浏览器就能够把多少变动后的视图重新渲染出来。

在编写翻译阶段:
  input元素上的ng-model指令会给<input>输入框绑定keydown事件;
  {{name}}那个变量替换表明式建设构造了三个 $watch ,来经受 name
变量改动的文告。
在实行期阶段:
  按下任何一个键(以X键为例),都会触发三个 input
输入框的keydown事件;
  input 上的授命捕捉到 input 内容的变动,然后调用 $apply(“name =
‘X’;”)来更新处于AngularJS推行上下文中的模子;
  AngularJS将 name=’X’应用到模型上;
  $digest
循环开首;这一个轮回是由三个小循环组成的,那八个小循环用来拍卖$evalAsync队列和$watch列表。这些$digest循环直到模型“稳固”前会一贯迭代。这些平静具体指的是$evalAsync列表为空,并且$watch列表中检验不到别的改造了。那几个$evalAsync队列是用来处理这一个“视图渲染前须要在此时此刻栈外实行的操作”。那日常使用
setTimeout(0)来完成的。并且,因为浏览器会依靠事件队列按顺序渲染视图,那时还有恐怕会招致视图的震撼。$watch列表是三个表明式的汇集,这么些表明式恐怕是自上次迭代后产生了更改的。假设检查评定到了有改换,那么$watch函数就可以被调用,它一般会把新的值更新到DOM中。

     接下来,让我们一起来探问互相进度中的那多少个巡回是怎么工作的?

   
 接下来,大家仍然结合代码来解析一下:

  $watch 列表检查评定到了name值的变通,然后公告{{name}}变量替换的表明式,这一个表明式担任将DOM实行更新;
  AngularJS退出实践上下文,然后退出Javascript上下文中的keydown事件;
  浏览器以革新的文书重新渲染视图。

  1. 
率先,浏览器会一向处在监听状态,一旦有事件被触发,就可以被加到贰个event
queue中,event queue中的事件会多个三个的奉行。

澳门葡京 13

作用域(Scope)

  2.  event
queue中的事件一经是被$apply()包起来的话,就能进来到AngularJS的context中,这里的fn()是大家愿目的在于AngularJS的context中实行的函数。

澳门葡京 14

功用域是用来质量评定模型的改动和为表明式提供实践上下文的。它是分支组织起来的,並且层级关系是追随DOM的构造的。

  3. 
AngularJS将实践fn()函数,通常状态下,这几个函数会改造使用的一些状态。

澳门葡京 15

上面这几个例子演示了{{name}}表明式在分裂的成效域下被解析成了不一致的值

  4. 
然后AngularJS会步向到由八个小循环组成的$digest循环中,多少个巡回是用来管理$evalAsync队列(用来schedule一些需求在渲染视图之前管理的操作,平常经过setTimeout(0)实现,速度会相当的慢,大概会产出视图抖动的主题材料)的,二个循环是拍卖$watch列表(是一对表明式的联谊,一旦有改观发生,那么$watch函数就能够被调用)的。$digest循环会平昔迭代知道$evalAsync队列为空並且$watch列表也为空的时候,即model不再有任何更动。

<!doctype html>
<html ng-app>
  <head>
    <script src="angular.js"></script>
  </head>
  <body>
    <input ng-model="name">
    <p>Hello {{name}}!</p>
  </body> 
</html>
<!doctype html>  <html ng-app>    <head>      <script src="http://code.angularjs.org/angular-1.1.0.min.js"></script>      <script>          function GreetCtrl($scope) {          $scope.name = 'World';       }         function ListCtrl($scope) {          $scope.names = ['Igor', 'Misko', 'Vojta'];       }      </script>    </head>    <body>      <div ng-controller="GreetCtrl">        Hello {{name}}!      </div>      <div ng-controller="ListCtrl">        <ol>          <li ng-repeat="name in names">{{name}}</li>        </ol>      </div>    </body>  </html>    

  5. 
一旦AngularJS的$digest循环停止,整个实行就能够相差AngularJS和Javascript的context,紧接着浏览器就能够把数量变动后的视图重新渲染出来。

澳门葡京 16

在GreetCtrl调控器中的name等于’World’。在ListCtrl调节器中的name等于’伊戈尔’,
‘Misko’, ‘Vojta’。因为它们的作用域分裂。

     接下来,大家照旧结合代码来分析一下:

澳门葡京 17

控制器

<!doctype html>
<html ng-app>
 <head>
 <script src="angular.js"></script>
 </head>
 <body>
 <input ng-model="name">
 <p>Hello {{name}}!</p>
 </body> 
</html>

澳门葡京 18

视图背后的调整代码正是调整器。它的主要性职行业内部容是结构模型和回调方法,并把模型和回调方法一齐发送到视图。
视图能够用作是成效域在模板(HTML)上的黑影。而效能域是三个在那之中地带,它把模型整理好传递给视图,把浏览器事件传递给调控器。调整器和视图的分别相当重大,因为:

 
这段代码和上一段代码唯一的区别就是有了一个input来接纳用户的输入。在用浏览器去拜望这几个html文件的时候,input上的ng-model指令会给input绑上keydown事件,并且会给name变量提出三个$watch来抽出变量值改动的通报。在互相阶段首要会时有发生以下一文山会海事件:

   
 这段代码和上一段代码独一的分别便是有了一个input来接过用户的输入。在用浏览器去做客这几个html文件的时候,input上的ng-model指令会给input绑上keydown事件,何况会给name变量提出三个$watch来收纳变量值改造的照拂。在互相阶段器重会发出以下一各类事件:
  1.
 当用户按下键盘上的某二个键的时候(比如说A),触发input上的keydown事件;
  2.
 input上的吩咐察觉到input里值的扭转,调用$apply(“name=‘A’”)更新处于AngularJS的context中的model;
  3.  AngularJS将’A’赋值给name;
  4.  digest循环初阶,digest循环起初,
watch列表检验到name值的调换,然后文告{{name}}表明式,更新DOM;
  5.
 退出AngularJS的context,然后退出Javascript的context中的keydown事件;
  6.  浏览注重新渲染视图。

(1)调节器是由Javascript写的。Javascript是命令式的,命令式的语言适合用来编排应用的作为。调节器不该包涵其余关于渲染代码(DOM援引只怕局地)。
(2)视图模板是用HTML写的。HTML是宣称正确,评释式的言语适合用来编写UI。视图不应有包罗别的表现。
(3)因为调节器和视图未有平素的调用关系,所以能够使四个视图对应同三个调整器。那对“换肤(re-skinning)”、适配分裂器械(比方移动设备和台式机)、测量试验,都足够重大。

  1. 
当用户按下键盘上的某三个键的时候(举个例子说A),触发input上的keydown事件;

  最后,希望那篇博客能支援大家更加好的接头AngularJS在偷偷干的政工。如有不正好的地点,请指正!

模型

  2. 
input上的授命察觉到input里值的浮动,调用$apply(“name=‘A’”)更新处于AngularJS的context中的model;

转自

模型正是用来和模板结合生成视图的多寡。模型在功效域中能够被援引,那样才具被渲染生成视图。和别的框架不均等的是,Angularjs对模型本人没有别的限制和供给。你无需连继续留任何类也无需完成内定的诀要。
模型能够是哈希情势的原生对象,也能够是总体对象类型。简单来说,模型能够是原生的Javascript对象。

  3.  AngularJS将’A’赋值给name;

视图

  4. 
$digest循环开头,$watch列表检查实验到name值的成形,然后布告{{name}}表明式,更新DOM;

所谓视图,就是指用户所看见的。
视图的生命周期由作为一个模板起始,它将和模型合併,并最后渲染到浏览器的DOM中。与任何模板系统不相同的是,AngularJS使用一种独特的样式来渲染视图。

  5. 
退出AngularJS的context,然后退出Javascript的context中的keydown事件;

其他模板 –
一大半模板系统办事规律,都是一齐头获得一个分包极度标识的HTML格局字符串。平常状态下模板的特种标识破坏了HTML的语法,乃至于模板是不能用HTML编辑器编辑的。然后那个字符串会被送到模板引擎这里分析,并和多少统一。合併的结果是三个得以被浏览器剖判的HTML字符串。这一个字符串会被.innerHTML方法写到DOM中。使用innerHTML会产生浏览器的再次渲染。当模型改造时,那全体流程又要再度三次。模板的活着周期就是DOM的翻新周期。这里本人想强调是,那一个模板的根基是字符串。
AngularJS –
AngularJS和别的模板系统区别。它接纳的是DOM实际不是字符串。模板仍旧是用HTML字符串写的,何况它还是是HTML。浏览器将它深入分析成DOM,
然后这么些DOM会作为输入传递给模板引擎,约等于大家的编写翻译器。编写翻译器查看里面包车型客车指令,找到的指令后,会起来监视指令内容中相应的模型。
那样做,就使得视图能“三番两次地”更新,没有须要模板和数目标再度联合。你的模子也就成了您视图变化的独一原因。

  6.  浏览注重新渲染视图。

指令

以上正是对AngularJS
工作规律的材质整理,后续继续补充有关材质,感激大家对本站的支撑!

三个指令
就是一种“由有个别属性、元素名称、css类名出现而招致的一举一动,或然说是DOM的变动”。指令能令你以一种申明式的法门来扩大HTML表示技能。

你只怕感兴趣的篇章:

  • AngularJS之注重注入模拟完成
  • AngularJS入门教程之XH凯雷德和依赖注入详解
  • AngularJS入门教程之双向绑定详解
  • AngularJS入门教程之迭代器过滤详解
  • AngularJS入门教程之AngularJS
    模板
  • AngularJS入门教程之静态模板详解
  • AngularJS入门教程指引程序
  • AngularJS
    整理一些优化的小技术
  • Angularjs结合Bootstrap制作的二个TODO
    List
  • AngularJS入门教程之链接与图片模板详解

Filters过滤器

过滤器扮演着数据翻译的角色。一般他们珍视用在数据需求格式化为本地格式的时候。它参照了UNIX过滤的平整,何况也兑现了“|”(管道)语法。

模块和注入器

每一种AngularJS应用都有七个独一的注入器。注入器提供贰个透过名字查找对象实例的方法。它将全部目标缓存在内部,所以假若再度调用同一名称的对象,每一次调用都会得到同三个实例。要是调用的靶子不真实,那么注入器就能让实例的厂子(instance
factory)函数创设贰个新的实例。

贰个模块就是一种配备注入器的实例的工厂函数的方式,大家也称它为“提供者(provider)”。

var myModule = angular.module(‘myModule’, [])

myModule.factory(‘serviceA’, function() {    
 //定义serviceA的厂子函数,myModule模块正是提供serviceA实例的工厂函数的提供者
  return {

  ……
  };
});

// create an injector and configure it from ‘myModule’
var $injector = angular.injector(‘myModule’);

// retrieve an object from the injector by name
var serviceA = $injector.get(‘serviceA’);    
 //从注入器查找serviceA对象,那时注入器会让实例serviceA的厂子函数factory创设叁个新的实例serviceA重临

// always true because of instance cache
$injector.get(‘serviceA’) === $injector.get(‘serviceA’);

注入器真正有力之处在于让艺术和品种能够通过注入器,央求到他们依据的零件,而不供给团结加载正视。

大家看看下边动态时间的那几个例子:

<!doctype html>  <html ng-app="timeExampleModule">    <head>      <script src="http://code.angularjs.org/angular-1.1.0.min.js"></script>      <script">        angular.module('timeExampleModule', []).          factory('time', function($timeout) {             var time = {};            (function tick() {              time.now = new Date().toString();              $timeout(tick, 1000);            })();            return time;          });      function ClockCtrl($scope, time) {         $scope.time = time;      }      </script>    </head>    <body>      <div ng-controller="ClockCtrl">        Current time is: {{ time.now }}      </div>    </body>  </html>    

你如若把须求的借助写在函数参数里。当AngularJS调用那些函数时,它会自动填充好需求的参数。那个事例中,当ng-controller实例化构造器ClockCtrl的时候,它自动提供了指明的注重time实例对象。

AngularJS 命名空间

为了防范意外的命名争执,
AngularJS为恐怕争辩的靶子名加从前缀”$”。所以请不要在您自个儿的代码里用”$”做前缀,以防和AngularJS代码发生争论。

 

 

 

加油!


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website