AngularJS是一个JS框架,它提供了创建网站和web应用结构化的方法。AngularJS是建立在jQuery的一个轻量级版本之上的JS库。AngularJS对于Node.js栈来说是一个完美的客户端库,它提供非常整洁和结构化的方法。
为什么选择AngularJS
AngularJS是建立在JavaScript和jQuery的轻量级版本之上的MVC框架,MVC框架将业务逻辑代码与视图和模型分离。
- 强制正确实现MVC
- HTML模板的声明风格
- 模型是JS对象
- 使用声明的方式
- 提供简单灵活的过滤器接口
- 应用倾向于使用传统JS应用所使用代码的一小部分
- 比传统的方法所需的文档对象模型操作少了很多
- 内置服务能够用结构化和可重用的方式实现自己的服务
- 清晰地把职责分离
了解AngularJS
AngularJS提供一种基于MVC模式的非常结构化的框架,该框架允许你构建功能强大且易于理解和维护的结构化的应用。
模块
AngularJS引入代表一个应用程序组件的模块的概念,模块提供命名空间,可基于模型名称引用指令、范围和其他组件,使得包装和再利用应用部分跟为容易。
AngularJS中每个视图通过 ng-app
指令分配一个单独的模块,可把其他模块作为依赖模块添加到主模块,以构建结构化和组件的应用。
作用域
AngularJS引入作用域(scope),作用域实际上只是用来填充呈现在页面上的视图的数据的一个JS表示。其数据来源可来自数据库、远程网络服务或是客户端AngularJS代码,也可由web服务器动态生成。
作用域的特点是,他们只是普通的JS对象,这意味着可根据需要在AngularJS代码中轻松地操纵它们。此外,还可嵌套作用域来组织数据已匹配他们正在使用的上下文。
视图
HTML网页而是基于DOM的,每个HTML元素都由一个DOM对象来标识。web浏览器读取DOM对象的属性并指导如何基于DOM对象的属性在页面上呈现HTML元素。
AngularJS引入了结合模板和指令来建立呈现用户的HTML视图的概念,指令包括两部分,第一部分是要被添加到一个HTML模板的额外属性、元素、CSS类。第二部分是扩展了DOM的一般行为的JS代码。
指令的优点是HTML模板通过指令指出预期的逻辑,此外内置的AngularJS指令处理大多数必要的DOM操作功能,利用它们可实现把作用域中的数据绑定到视图。
表达式
AngularJS具有在HTML模板中添加表达式的能力,AngularJS对表达式求值,然后动态地把结果添加到网页。表达式被链接到作用域,因此获得表达式可得到利用作用域中的值,当模式改变时表达式的值也跟着改变。
控制器
AngularJS 通过实现控制器完成MVC框架,控制器通过建立初始状态或值的作用域,并通过为作用域添加行为扩大了作用域。可使用指令把控制器添加到HTML元素中,在后台把他们实现为JS代码。
数据绑定
AngularJS内置数据绑定,数据绑定是把模型中的数据与页面显示内容链接的过程,AngularJS提供整洁的接口把模型数据链接到网页元素中。
AngularJS数据绑定是一个双向过程,当页面数据改变时模型被更新,当数据在模型中被改变时页面会自动更新。模型始终是向用户呈现的数据的唯一来源,而试图只是模型的一个投影。
服务
服务是在AngularJS环境中工作的主力,服务是为web应用提供功能的单例对象。服务功能与上下文或状态是完全独立的,很容易被一个应用的组件使用。AngularJS提供内置的服务组件用于基本用途,如HTTP请求、日志记录、分析、动画等。
依赖注入
依赖注入是一个过程,其中一个代码组件定义了对其他组件的依赖关系,当代码被初始化时,以来组件可提供组件内部访问。AngularJS应用大量使用依赖注入。依赖注入的常见用法是使用服务,此外,一个AngularJS模块通过依赖使用另一个模块的功能。
职责分离
设计AngularJS应用时重要的原则是职责分离,选择一个结构化框架是为了确保代码被很好地实现,易于理解维护和测试。
你应该遵守的规则
- 视图作为应用的正式表示结构,表明任何表示逻辑都作为视图的HTML模板指令。
- 若需进行DOM操作,在内置指令或自定义指令的JS中进行,而不是其他地方进行。
- 把任何可重复使用的任务都实现为服务,并通过依赖注入把它们添加到模块中。
- 确保作用域反映了模型的当前状态,并是由该视图使用的视图的单一来源。
- 确保控制器只起到充实作用域的数据的作用而不包含任何义务逻辑
- 模型的命名空间中定义控制器而非全局定义,以确保应用可被包装并防止铺天盖地的全局命名空间。
AngularJS 生命周期
引导阶段
在AngularJS JS被下载到浏览器时发生,AngularJS初始化自身必要的组件,初始化ng-app指令指向的模块。模块被加载依赖关系都被注入到模块,提供给模块中的代码使用。
编译阶段
HTML编译阶段,最初页面加载时DOM的静态形式被加载到浏览器,在编译阶段静态DOM被替换为一个表示AngularJS视图的动态DOM。
HTML编译阶段包含两部分:遍历静态DOM并收集所有指令,把指令链接到AngularJS内置库或自定义指令代码中相应的JS功能上。指令与作用域相结合产生动态或实时视图。
运行时数据绑定阶段
运行时阶段一直存在直到用户重新加载或离开页面为止,在这一时点上在作用域中的任何更改都将反映在视图中,并且在视图中的任何更改也直接更新到作用域,使作用域成为视图数据的单一来源。
AngularJS的行为不同于传统的数据绑定方法,传统的方法把模型与从引擎接收到的数据相结合,然后在每次数据发生变化时对DOM执行操作。AngularJS只编译DOM一次然后根据需要链接已编译的模板,从而使之比传统方法更高效。