`

AngularJS

 
阅读更多

首先,AngularJS 是建立在轻量 jQuery 之上的一个结构化前端 MVVM 框架。

相比较 Facebook 的 React,个人觉得 AngularJS 可能更适合企业用户,创建单页面的 CRUD 应用。例如对表格表单的处理,AngularJS 就能展现其强大快捷的一面。

另外,AngularJS 非常结构化,大而全,坏处就是规定比较严格,好处是代码更一致,而且有一套很完善的测试流程支持。但是性能经常受人诟病。企业用户可能对性能没有那么敏感,反而喜欢这种写起来条理清晰,功能强大的框架。这有点像 Java,虽然臃肿,慢,但是成熟稳定,所以企业往往选择这样的框架。不过 React 也不是一个框架,不好比较。

Template 和 Directive

相比较 jQuery 通过直接操作 DOM 来编辑页面,AngularJS 引入了模板(template)和 指令(directive)来创建 HTML 的视图 view。

指令 directive 包含两部分。一个是 HTML 模板上额外的属性 attribute,elements 和 CSS 类等;另一个部分是扩展 DOM 行为的 JavaScript 代码。

AngularJS 鼓励只使用 directive 来操作 DOM.

表达式 Expression

这个很多模板都有。就是可以在模板里进行些简单的运算使代码更紧凑。

AngularJS 的 Expression 就算遇到操作 undefined 或者 null 变量也不抛出异常,只是简单地把它们当做没有值对待。你也不能主动抛出异常。

Expression 不能有循环和条件语句。

控制器 Controller

JavaScript 代码, 用于更新 $scope 的变量,操作页面逻辑等,但是不要把业务逻辑放在这里。controller 里的 $scope 是唯一页面数据来源。不要直接修改 DOM。

数据绑定 Data Binding

AngularJS 里最好用的特性之一。可以直接把 HTML 里的 ng-model 和 Controller 里 $scope 的变量双向绑定,这样其中一个改变,另外一端就会自动更行。不过情况复杂时也得使用 $scope.apply() 来强制更新。

服务 Services

一些干活的单例对象。比如 AJAX 请求,logging,动画和解析等。也可以创建自己的服务来复用代码。一般和数据库和其他后端服务打交道都用服务。 Service 都是单例 singleton 对象。

依赖注入 Depenency Injection

依赖注入是一种设计模式。在服务器端用得比较多。AngularJS 是比较早的把依赖注入引入到前端的框架。

注入就是把一个对象引入另外一个对象来达到代码复用的目的。比如上面的服务模块就是这样注入到需要的模块。这样做的另外一个好处就是代码更加清晰。

AngularJS 通过 providers 和 injector service 来达到依赖注入的目的。Provider 就是要注入的对象,通常是一个 AngularJS 模块 module 的一部分(例如 app.factory(), value(), constant() 和 service()函数,这也是4种常用的service;还有 controller(), animation(), filter() 和 directive()),然后注册到 injector 服务。注意 provider 是单例模式,当有依赖请求,injector 服务会检查是否已经有这个 provider 在运行,有则调用这个已经存在的,没有才会在 injector 的 cache 里创建一个新实例(instance)。

AngularJS Modules

AngularJS Modules 的实现分两个阶段:配置和运行。配置就是调用 Module 的 config 方法;运行调用 run 方法。不过 run 用得不多,一般都是用 controller 来控制。

调用 angular.module() 方法就可以创建一个模块,也就是一个 Module 对象的实例。同时它还会把这个实例注册到前面提到的 injector 服务。

注意以下的区别:

//带[]。这是创建一个新的 “myModule”.如果已有这个模块,则会覆盖之前的
angular.module("myModule",[]);//没有第二个参数[]。返回已经存在的同名模块。如果没有则会报错。
angular.module("myModule");

责任分离

之前说 AngularJS 很结构化就是讲究责任分离,这样代码才好理解,维护和测试。

结构化的代价就是有很多规则要遵守(所以很多人说 Angular 入门容易精通难):

  • 在 HTML 里使用 directive 来作为表现层的逻辑
  • 使用定制的 directive 来操作 DOM
  • 使用服务 service 来复用代码,然后再使用依赖注入添加到别的模块
  • controller 里的 $scope 是唯一页面数据来源。不要直接修改 DOM。
  • controller 只是用来操作 $scope 里的数据的,不要把业务逻辑放在这里
  • controller 不要在全局范围

将业务逻辑和界面逻辑分开。Controller 里只有页面逻辑,没有业务逻辑;业务逻辑放到后端,前端通过 service 来获取。

Life Cycle

一个页面的 Angular 代码每次导入到浏览器分三阶段:导入 bootstrap,编译 compilation 和实时运行 runtime。

1. Bootstrap

第一步,下载 JavaScript 代码到浏览器。AngularJS 初始化自己的组件和初始化你写的 ng-app 模块。当你的模块加载后,注入所有依赖模块。

2. Compilation

第二步,HTML 编译。当网页加载后,一个静态的 DOM 表也会加载到浏览器。在这个编译阶段,静态 DOM 会被 AngularJS 视图的动态 DOM 取代。

这个阶段又分两部分。先是遍历静态 DOM 和收集所有 directive,然后链接 directive 与相关的 JavaScript 代码。

因为 HTML 是不区分大小写,而 AngularJS 区分,所以编译时 HTML 的标签和属性会被规范化。例如所有以下都会被规范为 ngModel。所以不是只有 ng-model 一种写法。但是大家都习惯使用 ng-model.

  • ng-model; ng_model; ng:model
  • data-ng-model; data-ng_model; data-ng:model
  • x-ng-model; x-ng_model; x-ng:model

规范化规律:

  1. 从 element/attributes 去掉 x- 和 data-。
  2. 转换 : - _ 三种分隔符为 camelCase.
3. 实时数据绑定

最后一步实时运行阶段。就是编译后到用户刷新或者离开该页面。在这个阶段,AngularJS 实现数据的双向绑定。AngularJS 的数据绑定和传统的不太一样。传统方法是从模板引擎接收到模板和数据,然后当每次收到数据更新时修改 DOM. 而 AngularJS 只编译 DOM 一次,然后只和必要的编译好的模板链接,更有效率。

添加 AngularJS 到 HTML

尽量把 angular.js 的 script tag 添加在 HTML 文件 body 里所有标签的最后。因为 angular.js 文件比较大,加载后编译器就会开始编译相应代码,然后搜索 directive。因此最后加载 angular.js 可以使网页加载更快些,或者感觉更快一些。

不过现在很多浏览器都支持 async 和 defer 加载模式,angular.js 添加位置就灵活多了。

API

AngularJS 还有一些全局函数供调用。比如深度拷贝 copy,json 对象和字符串之间的转换等。可以查看文档来了解他们的具体信息。

Protractor

Protractor 是 AnguarJS 团队在 webDriver 基础上开发的端对端 e2e 测试工具,对很多方法进行了 AngularJS 封装. 非常好用的一个测试框架, 使测试变得更加容易。

分享到:
评论

相关推荐

    AngularJS书两本

    AngularJS,作为一款由Google维护的前端JavaScript框架,自2010年发布以来,一直在Web开发领域占据重要地位。这两本书《AngularJS_权威教程》和《AngularJS_深度剖析与最佳实践》将帮助我们深入理解并掌握这一强大的...

    AngularJS开发ASP.NET MVC

    ### AngularJS 开发 ASP.NET MVC #### 知识点概览 - **AngularJS与ASP.NET MVC结合的优势** - **AngularJS的特点与优势** - **AngularJS的基本概念(如数据绑定、指令等)** - **如何在ASP.NET MVC项目中引入...

    Mastering Web Application Development with AngularJS

    《精通AngularJS》深入浅出地讲解了AngularJS的开发概念和原理,并通过丰富的开发实例向读者展示了构建复杂应用的完整过程,包括学习使用AngularJS特有的基于DOM的模板系统,实现复杂的后端通信,创建漂亮的表单,...

    AngularJS1.x快速入门

    ### AngularJS1.x快速入门知识点总结 #### 一、AngularJS概述 - **定义**:AngularJS是一款由Google维护的开源JavaScript框架,主要用于构建动态Web应用程序。它采用MVC(Model-View-Controller)设计模式,并实现...

    angularJs demo 各种基本用法

    AngularJS 是一个强大的JavaScript框架,主要用于构建动态web应用。它通过数据绑定和依赖注入机制,极大地简化了前端开发。在"angularJs demo 各种基本用法"中,我们可以深入探讨以下几个关键概念:路由(router)、...

    ssm+bootstrap+angularJs案例

    【标题】"ssm+bootstrap+angularJs案例"是一个整合了Spring、SpringMVC、MyBatis、BootStrap和AngularJS技术的实践项目。这个案例主要针对初学者,旨在帮助他们快速理解并掌握这些技术在实际开发中的应用。 ...

    AngularJS Eclipse 1.2.0 插件下载

    AngularJS Eclipse 1.2.0 插件是专为开发者设计的一款强大的工具,它将AngularJS框架与Eclipse集成,极大地提升了开发AngularJS应用程序的效率。Eclipse是一款广泛使用的开源集成开发环境(IDE),而AngularJS则是一...

    Learning AngularJS.pdf (0分下载网)

    ### AngularJS概览 《Learning AngularJS》一书由Ken Williamson编写,于2015年由O'Reilly Media出版。本书旨在帮助读者深入了解AngularJS框架的核心概念和技术细节,适用于那些希望利用AngularJS进行Web应用程序...

    angularjs下拉树控件

    在本文中,我们将深入探讨如何在AngularJS框架中实现下拉树控件,这是一种结合了树形结构和下拉选择功能的用户界面组件。AngularJS是Google开发的一个强大的前端JavaScript框架,它允许开发者构建可维护、可扩展的...

    Pro AngularJS 英文版 源代码

    《Pro AngularJS》是AngularJS框架的一本权威指南,它深入介绍了这个强大的JavaScript框架,旨在帮助开发者充分利用AngularJS构建高效、可维护的Web应用程序。这本书的英文版源代码提供了书中实例和练习的完整实现,...

    AngularJS模块化开发--增删改查

    AngularJS是一款强大的JavaScript框架,由Google维护,主要用于构建单页应用程序(SPA)。在这个"AngularJS模块化开发--增删改查"的项目中,我们将会深入探讨如何利用AngularJS进行高效且结构化的应用开发,同时结合...

    Professional.AngularJS.1118832078

    A comprehensive guide to AngularJS, Google's open-source client-side framework for app development. Most of the existing guides to AngularJS struggle to provide simple and understandable explanations...

    angularjs ui.router嵌套路由demo

    AngularJS UI.Router是一个强大的路由模块,它为AngularJS应用程序提供了更复杂的导航结构和状态管理功能。这个"angularjs ui.router嵌套路由demo"是展示如何在AngularJS项目中使用UI.Router进行多级路由配置和页面...

    angularJs权威和精通angularjs

    AngularJS,作为一款由Google维护的前端JavaScript框架,自2010年发布以来,一直在Web开发领域占据着重要的地位。它以其强大的双向数据绑定、依赖注入和模块化设计,极大地提高了开发效率,使得构建复杂的单页应用...

    AngularJS详细使用说明从零到高

    ### AngularJS详细使用说明从零到高手 #### 一、AngularJS概述 AngularJS是一个用于构建动态Web应用程序的开源框架,由Google维护和支持。AngularJS的设计理念是将HTML作为模板语言,并通过扩展其语法来更好地定义...

    Angularjs 合集 Angularjs 合集

    这个合集包含了三本书籍,分别是《AngularJS by Example》、《AngularJS Web Application Development Cookbook》以及《Apress.Pro.AngularJS》,它们分别从不同的角度深入探讨了AngularJS的使用和开发。 ...

    AngularJS学习 chm 文件

    AngularJS,是由Google维护的开源JavaScript框架,用于构建单页应用程序(SPA)。它极大地扩展了HTML的功能,使得在客户端能够更高效地处理数据和逻辑,提供了丰富的开发工具和API,帮助开发者构建动态、交互性强的...

    《AngularJS即学即用》【书本源码下载】

    ### AngularJS基础知识与实战应用 #### 一、AngularJS简介 AngularJS是一种广泛使用的JavaScript框架,它由Google维护,主要用于构建动态网页应用。通过AngularJS,开发者可以利用HTML作为模板语言,并扩展HTML的...

Global site tag (gtag.js) - Google Analytics