5.手动初始化
Angular 代码运行时遵循的顺序:
1. 在HTML页面以及所有代码加载完毕后,Angular 会去找到应用的根元素(通常是文档的根节点)
2. 调用 api/angular.bootstrap 去 编译 各元素成为一个可执行的且双向绑定的应用
6.自动初始化
Angular 在以下两种情况下自动初始化,一个是在 DOMContentLoaded 事件触发时,或者在 angular.js 脚本被执行的同时如果 document.readyState 被置为 'complete' 的话。初始化时,Angular 会去找 ng-app 这个指明应用开始所在的指令。如果 ng-app 指令被找到的话,Angular 会做以下几件事:
• 加载 ng-app 指令所指定的 模块
• 创建应用所需的 injector
• 以 ng-app 所在的节点为根节点,开始遍历并编译DOM树(ng-app 指出了应用的哪一部份开始时 Angular 去编译的)
7.
当 api/angular.bootstrap 被调用时,如果 window.name 包含 NG_DEFER_BOOTSTRAP! 前缀,引导进程会被暂停直到 angular.resumeBootstrap() 被调用。
8.
概念 说明
模板(Template) 带有Angular扩展标记的HTML
指令(Directive) 用于通过自定义属性和元素扩展HTML的行为
模型(Model) 用于显示给用户并且与用户互动的数据
作用域(Scope) 用来存储模型(Model)的语境(context)。模型放在这个语境中才能被控制器、指令和表达式等访问到
表达式(Expression) 模板中可以通过它来访问作用域(Scope)中的变量和函数
编译器(Compiler) 用来编译模板(Template),并且对其中包含的指令(Directive)和表达式(Expression)进行实例化
过滤器(Filter) 负责格式化表达式(Expression)的值,以便呈现给用户
视图(View) 用户看到的内容(即DOM)
数据绑定(Data Binding) 自动同步模型(Model)中的数据和视图(View)表现
控制器(Controller) 视图(View)背后的业务逻辑
依赖注入(Dependency Injection) 负责创建和自动装载对象或函数
注入器(Injector) 用来实现依赖注入(Injection)的容器
模块(Module) 用来配置注入器
服务(Service) 独立于视图(View)的、可复用的业务逻辑
9.
对于Angular,一个程序中唯一允许接触DOM的地方就是“指令”
10.
Angular可以通过这种数组语法来定义依赖,以免js代码压缩器(Minifier)破坏这个“依赖注入”的过程。 因为这些js代码压缩器通常都会把构造函数的参数重命名为很短的名字,比如a,而常规的依赖注入是需要根据参数名来查找“被注入对象”的。 (译注:因为字符串不会被js代码压缩器重命名,所以数组语法可以解决这个问题。)
10.
一般情况下,我们使用控制器做两件事:
• 初始化 $scope 对象
• 为 $scope 对象添加行为(方法)
11.
最常见的保持控制器“纯度”的方法是将那些不属于控制器的逻辑都封装到服务(services)中,然后在控制器中通过依赖注入调用相关服务。
12.通过两种方法可以实现控制器和 scope 对象的关联:
• ngController指令 这个指令就会创建一个新的 scope
• $route路由服务
13.
作用域是Web应用的控制器和视图之间的粘结剂。在Angular中,最直观的表现是:在自定义指令中,处在模版的 链接(linking) 阶段时, 指令(directive)会设置一个 $watch 函数监听着作用域中各表达式(注:这个过程是隐式的)。这个 $watch 允许指令在作用域中的属性变化时收到通知, 进而让指令能够根据这个改变来对DOM进行重新渲染,以便更新已改变的属性值(注:属性值就是scope对象中的属性,也就是数据模型)。
14. 作用域可以像DOM节点一样,进行事件的传播。主要是有两个方法:
• broadcasted :从父级作用域广播至子级 scope
• emitted :从子级作用域往上发射到父级作用域
15.
网友评论