http://www.cnblogs.com/lzj0616/p/6440563.html

[译]AngularJS 1.3.0 开发者指南(一) -- 介绍

Angular是什么 ?

AngularJS是一款针对动态web应用的结构框架. 它可以让像使用模板语言使用HTML, 并且可以扩展HTML的语法来明确简洁的表示应用组件. Angular的数据绑定机制和依赖注入机制排除了许多原本你不得不写的代码. 它作用于浏览端, 使得它成为任何服务端技术的良好伙伴.

Angular是为了弥补HTML在构建应用上的不足而设计的. 对于静态文档来说, HTML是很不错的声明式语言, 但是要构建web应用, 它却有些乏力. 所以我不得不做一些工作来让浏览器做我想要的事.

通常, 我们通过以下方式解决动态应用与静态网页之前的不匹配:

  • 库 --- 一个函数集合, 我们用它来编写我们的web应用. 我们自己编码作为主体, 然后我们在合适的时机调用库, 例如jQuery.
  • 框架 --- web应用的一种特定实现, 我们可以在它上面编码实现具体的逻辑. 在这里, 框架起主导作用, 它可以在应用的具体逻辑中调用你的代码, 例如: durandal, ember等.

Angular采用了另一种方式. 它试图通过创建新的HTML结构来弥补HMTL在构建应用上的不足. Angular通过我们称之为指令的结构, 使浏览器可以解析新的语法. 包括:

  • 通过{{}}通过数据绑定
  • 通过DOM控制结构实现迭代或隐藏DOM片段
  • 支持表单和表单验证
  • 能将代码关联到DOM元素上
  • 将HTML组成为可重用的组件

完整的客户端解决方案

在构建Web应用程序客户端的总体工程中, Angular不在只是其中的一小部分. 它可以处理你曾经手写的所有DOM和AJAX粘合代码, 并且把它们放到一个定义好的结构中. 这使得Angular在构建CRUD应用时有些"固执", 但是, 它也试图确保它的"固执"只是你简单改变的一个开始. Angular提供了以下可灵活变动的功能:

  • 构建一个CRUD应用所需要的一切包括: data-binding(数据绑定机制), basic templating directives(基础模板指令), form validation(表单验证), routing(路由), deep-linking(深度链接), reusable components(可重用组件), dependency injection(依赖注入).
  • 测试方面: unit-testing(单元测试), end-to-end testing(端到端测试), mocks, test harnesses(模拟和测试工具).
  • 具体目录布局和测试脚本的种子应用作为起点.

Angular的可爱之处

对开发人员来说, Angular通过提供更高层次的抽象来简化应用程序的开发. 像其他抽象一样, 这带来了灵活性的成本. 换句话说, 不是每个应用都适合使用Angular. Angular主要是考虑用来构建CRUD应用. 幸运的是, 多数web应用都是CRUD应用. 为了弄懂Angular擅长什么, 我们就得先弄清楚什么样的应用不适合使用Angular.

动画和GUI编辑器都是具有密集和复杂DOM操作的应用. 这种应用与CRUD应用是不同的, 它们不太适合使用Angular. 它们更适合使用低层次抽象的库, 例如jQuery.

Angular之禅

Angular建立在这样的信念之上: 在创建用界面和组装软件方法声明式语言要优于命令式语言, 而命令式语言更擅长表达业务逻辑.

  • 从应用逻辑中分离DOM操作, 这可以改善代码的可测试性.
  • 将测试与编码同等对待, 测试的难度一定程度上取决于代码的结构化.
  • 前后端(客户端与服务端)分离, 前后端开发同步进行, 有利于前后端代码的重用.
  • 框架在整个构建应用的过程中指导开发者, 从UI设计到编写业务逻辑, 到测试.
  • 化整为零, 化繁为简.

Argular会将你从以下苦海中解救出来:

  • 注册回调函数: 注册回调函数会降低代码的可读性, 使代码变得零散. 应该移除像回调函数这样的通用代码. 这样会大幅减少(因JavaScript的不足)你不得不写的JavaScript代码, 从而使你的应用更加清晰.
  • 编程实现HTML DOM操作: 操作DOM是AJAX应用的基础内容, 但是这往往是繁琐并且易错的. 通过声明的方式, 描述UI是怎样随着应用的状态变化而发生改变的, 你将从低级的DOM操作中解脱出来. 大多数Angular应用不需要通过编辑来实现DOM操作, 除非你这样做, 当然也是可以的.
  • 在UI页面中读写数据: CRUD操作占据了大多数AJAX应用的任务. 从服务端读取到的数据流封装成一个内部对象传送到HTML表单中, 用户修改了表单内容后, 将对表单进行验证, 显示验证错误信息, 返回一个内部模型发送回服务端, 这个过程产生了许多重复代码. 而Angular消除了几乎所有的重复代码, 使得代码只描述应用的总体流程, 而不是实现细节.
  • 写大量的初始化代码: 通过你需要编写许多基础性的代码才能实现一个基本的AJAX的"Hello World"应用. 使用Angular, 你将可以很容易的通过使用服务化来初始你的应用, 而这些服务就会像Guice的依赖注入一样自动注入到你的应用当中. 你就可以很快的开始开发你的功能. 并且你还可以全程控制自动化测试的初始化过程.
要比昨天的自己更强

http://www.cnblogs.com/lzj0616/p/6440563.html

[译]AngularJS 1.3.0 开发者指南(一) -- 介绍 (转)的更多相关文章

  1. [译]AngularJS 1.3.0 开发者指南(一) -- 介绍

    [译]AngularJS 1.3.0 开发者指南(一) -- 介绍 Angular是什么 ? AngularJS是一款针对动态web应用的结构框架. 它可以让像使用模板语言使用HTML, 并且可以扩展 ...

  2. (译)AngularJS1.3.0 开发者指南(四) -- 控制器

    理解Controllers 在AngularJS中, Controller是一个Javascript构造函数, 常常被用来扩展 Angular Scope 对象. 控制器通过 ng-controlle ...

  3. Spring Security OAuth 2开发者指南译

    Spring Security OAuth 2开发者指南译 介绍 这是用户指南的支持OAuth 2.0.对于OAuth 1.0,一切都是不同的,所以看到它的用户指南. 本用户指南分为两部分,第一部分为 ...

  4. Cocos引擎开发者指南(1-5)

    Cocos引擎开发者指南 英文原版:http://www.cocos2d-x.org/docs/programmers-guide/1/ 中午翻译:http://www.cocos.com/doc/t ...

  5. GOOGLE PROTOBUF开发者指南

    原文地址:http://www.cppblog.com/liquidx/archive/2009/06/23/88366.html 译者: gashero 目录 1   概览 1.1   什么是pro ...

  6. Protocol Buffers(Protobuf)开发者指南---概览

    Protocol Buffers(Protobuf)开发者指南---概览 欢迎来到protocol buffers的开发者指南文档,protocol buffers是一个与编程语言无关‘.系统平台无关 ...

  7. Android开发者指南-方位传感器-Position Sensor

    Android开发者指南-方位传感器-Position Sensor 转载自:http://blog.sina.com.cn/s/blog_48d4913001010zsu.html Position ...

  8. OAuth2.0开发指南

    OAuth2.0开发指南 1.认证与登录 来往开放平台支持3种不同的OAuth 2.0验证与授权流程: 服务端流程(协议中Authorization Code Flow): 此流程适用于在Web服务端 ...

  9. libusb 开发者指南-牛胜超(转)

    源:libusb 开发者指南 libusb Developers Guidelibusb 开发者指南 原作者:Johannes Erdfelt翻译者:牛胜超 Table of Contents目录 P ...

随机推荐

  1. Redis05——Redis高级运用(管道连接,发布订阅,布隆过滤器)

    Redis高级运用 一.管道连接redis(一次发送多个命令,节省往返时间) 1.安装nc yum install nc -y 2.通过nc连接redis nc localhost 6379 3.通过 ...

  2. PAT乙级1018

    题目链接 https://pintia.cn/problem-sets/994805260223102976/problems/994805304020025344 题解 刚开始做很懵逼,可能并不难吧 ...

  3. Java io 理解

    任何程序都有io部分,io是对程序来说数据流的输入和输出.这里说的流,是指有字节组成的列,不断输入程序,或者从程序中输出,我们形象称为流.Java的io流有两种,一种叫字节流,最原始的:一种叫字符流. ...

  4. Django :执行 python manage.py makemigrations 时报错 TypeError: __init__() missing 1 required positional argument: 'on_delete'

    原因 执行命令 python manage.py makemigrations 报错 TypeError: __init__() missing 1 required positional argum ...

  5. oracle修改已存在数据的字段类型

    第一次使用oracle数据库,在通过Navicat premium工具修改字段类型时,发现报“ORA-01439: column to be modified must be empty to cha ...

  6. spring boot 导出 jar 配置文件的问题

    网上有很多关联映射及讲解,想要说的是   主要就是 classpath  加上的话   jar就可以找到了

  7. Js基础知识(四) - js运行原理与机制

    js运行机制 本章了解一下js的运行原理,了解了js的运行原理才能写出更优美的代码,提高运行效率,还能解决开发中遇到的不理解的问题. 进程与线程 进程是cpu资源分配的最小单位,进程可以包含多个线程. ...

  8. 【转】分布式文件系统FastDFS架构剖析

    FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能通过专有API对文件进行存取访问,不支持POSIX接口方式, ...

  9. [Git] How to revert one file changes from one commit

    Many times we might changed one file which we don't intent to do... but it was too late, until we fo ...

  10. python socket.io 坑。

    python下star最高的是https://github.com/miguelgrinberg/python-socketio 是flask作者写的.client server都有了,而且还提供了a ...