AngularJS是一种为动态web应用设计的框架。它使用HTML作为模板语言,并且扩展了HTML的语法,让开发者能够更清晰、更简洁地开发应用组件。Angular的动态绑定和依赖注入将为开发者节省大量代码。所有这些在浏览器端的特性,也使得它可以与任何服务端技术完美搭配使用。
Angular将使HTML成为设计应用程序的语言。对于静态文档来说,HTML是一种伟大的声明式语言。但是却并不适合于创建应用程序。所以当我们想用它来创建web应用的时候,就像是在欺骗浏览器,把它变成我们想要的应用程序。
这种动态应用程序和静态文档之间的矛盾通常用一下方法解决:
库 - 用于开发web应用的有效的函数集合。主要由你编写的代码来进行合适的调用,例如:JQuery。
框架 - 作为web应用的特别补充,使得你的代码只需要编写细节部分的代码。当应用需要使用某些功能时,框架负责调用你的代码。例如:durandal,ember等。Angular采取了另一个方法。它试图通过创建新的HTML结构来最小化以文档为中心的HTML和一个应用程序所需功能之间的矛盾。Angular通过一种我们称之为指令的结构,让浏览器学习了新的语法。如下例所示:
在创建web应用客户端这个难题中,Angular并不只是一个局部的解决方法。它包括了所有的那些你曾经写过的、并且在其他定义明确的结构中使用过的DOM和AJAX之间交互的代码。这使得Angular成为了一个以怎样创建一个CRUD(create read update delete)应用程序为依据的框架。虽然它以此为据,但是仍然试图保证这只是一个起点。你仍然可以轻松地改变它。Angular提供了以下内容:
Angular通过为开发者提供了一个更高级别的抽象,简化了应用程序开发。像任何抽象一样,它是以牺牲灵活性为代价的。换句话说,不是每个应用程序都适合使用Angular。Angular是为CRUD应用程序的而创建的。幸运的是,CRUD应用代表多数Web应用程序。要了解Angular擅长什么,所以首先要了解哪些应用是不适合Angular。
游戏和图形编辑器都是密集和复杂的DOM操作的应用实例。这些类型的应用程序都不同于CRUD类型的应用程序,因此可能不太适合使用Angular。在这些情况下,它可能更适合使用抽象级别较低的库,如jQuery。
Angular的信念是,在编写UI和软件组件时,声明式代码更优于命令式代码,然而在编写业务逻辑时命令式代码更有优势。
从应用逻辑中将DOM操作解耦是一种非常好的处理方式。这极大的提升了代码的可测试性。
认为测试代码和编写代码同等重要是一种非常好的观念。代码的结构极大地影响了测试难度。
把客户端从服务端进行解耦也是一种相当好的方式。使得双方的开发者能够并行开发,并且代码能够重用
框架通过创建一个应用程序的整个流程,包括设计UI,编写业务逻辑,进行测试,来有效地引导开发者。
它有利于拆分、简化任务。
Angular可以将你从以下痛苦中解脱:
注册回调函数:注册大量的回调函数使得你的代码变得结构混乱。移除常见的模板代码例如回调函数是一件有益的事。这将极大地减少你的javascript代码,并且使你的应用程序变得清晰明了。
以编程的方式操作HTML DOM:虽然操作HTML DOM是AJAX应用的基础,但它也是笨拙的、易错的。通过声明当应用程序状态变化时UI的变化方式,你将从低级的DOM操作中解放出来大多数Angular编写的应用程序从来不用编程的方式操作DOM,尽管如果你想要的话也是可以的。
与UI交互数据:CRUD操作构成了AJAX应用程序的大部分任务。操作数据从服务器到一个内部对象,再到一个允许用户修改,需要校验,和显示验证错误的HTML表单,再返回到一个内部模型,然后返回给服务器,造成大量的样板代码。Angular消除了几乎所有的样板代码,让代码描述整个流程而不是实现所有细节。
编写大量的项目初始化代码:通常你需要编写大量的代码来让你一个“Hello World”的AJAX程序工作。通过Angula的那些标签式的依赖注入风格被自动注入到应用程序的服务,你可以很容易地启动你的程序,从而让你更快地开始开发程序功能。还有一个额外的好处,在自动测试中你可以完全控制这个初始化过程。