Angular 核心概念与框架演进

管理员账号

2018-08-31

小编说:在本文简单介绍了Angular的核心概念与演进过程,从七大核心概念看其背后的设计亮点,通过分析Angular 从框架到平台演进的过程来观察其发展趋势。方便读者对Angular有个直观的全局认识。本文选自《揭秘Angular(第2版)》。

1 核心概念

Angular 框架有七大核心概念,它们是Angular 的重要组成部分。

Angular 的七大核心概念

模块

在Web 开发中,通过依赖全局状态或变量和保证JavaScript 文件引入顺序来正确加载相应的类库。比如:$ 代表jQuery,在引入$.superAwesomeDatePicker 类库来实现日期选择控件前,需要确保jQuery 已经正常载入。随着项目中的程序越来越大、文件切分越来越细,就会需要一个成熟的模块系统来帮助管理项目文件的依赖关系。在新的语言标准ES 6 中,提供了import 来导入在其他文件中定义的模块,且用export 将诸如jQuery 或moment 这样的依赖导出到业务代码模块中。

指令与组件

在Angular 中,指令是一个极其重要的概念。指令可以为特定DOM 元素添加新的行为特征,从而扩展元素的功能。指令与HTML 元素属性的使用方式非常相似,但指令的可自定义特性在一定程度上弥补了HTML 元素属性功能的不足,这也为多样的Web前端开发创造了更多的可能性。

实际上,组件是指令的一种类型。以组件为基础的架构模式是现在Web 前端开发的主流方式。不仅仅在Angular 中,在类似的React、Ember 或Polymer 等框架中也是很常见的。这种开发方式就是构建一个个小的组织代码单元,每个代码单元的职责定义清晰,并且可以在多个应用中复用。例如:想使用Google 地图组件,就在页面引入 这样语义化的标签。

Angular 全面支持这样的开发方式,在Angular 中组件是“一等公民”。伴随组件而来的是组件树的概念。一般来说,每个Angular 应用都有一棵组件树,由应用组件或者叫顶层的根组件和许多子组件及兄弟组件组成。组件树是很重要的概念,后续章节还会继续讲解。它有很多作用,比如形象地勾勒出UI 界面的组成,这种树形结构也体现了从一个组件到另一个组件的数据流动,Angular 也依赖组件树做出合适的变化监测策略。

一个博客模块的组件树例子如下。

一个博客模块的组件树例子

变化监测是Angular 在应用的数据变化后,用于决定哪个组件需要随之刷新的机制。

模板和数据绑定

当使用组件标签时,可以通过template 或templateUrl 属性引入HTML 来描述让Angular 渲染显示的界面内容。另外,需要数据绑定机制来实现把数据映射到模板上,或者从模板(如input 控件)中取回数据。

服务和依赖注入

在Angular 中,如果说组件是用于处理界面和交互相关的,那么服务就是开发者用于书写和放置可重用的公共功能(如日志处理、权限管理等)和复杂的业务逻辑的地方。服务可以被共享,从而被多个组件复用。在Angular 中,一个服务就是一个简单的类。通常在组件中引用服务来处理数据和实现逻辑。

依赖注入可以帮助应用解耦,一般通过对实现服务的类加上@Injectable 装饰器,同时把它注册到Provider(可以在模块、其他服务、根组件或需要注入服务的上层组件中实施),从而将服务提供给调用者使用。

2 平台简介

Angular 的项目经理Brad 说过,Angular 现在更像是一个平台,而不是简单的类库或者单一的框架。Angular 在技术架构上倾向于平台化设计,其跨平台开发特性使得周边生态圈变得更加繁荣兴旺。

Angular 平台一览

Angular 框架核心包含了以下内容:

  • 依赖注入
  • 装饰器支持
  • Zones
  • 编译服务
  • 变化监测
  • 渲染引擎

其中,Zones 可以独立于Angular 使用在其他地方,并且已经提交给TC39,TC39 也考虑将其纳入ECMA 标准中。而渲染引擎也是平台独立的,从而可以方便地实施在桌面软件和原生的移动客户端中。

在此之上,还有不少其他的外部工具库,类似于:

  • Angular Material,Google 官方的Material 设计风格的UI 组件库。
  • Angular Mobile Toolkit,它提供工具和代码技巧来协助开发高性能的移动应用。
  • Angular Universal,用它实现后端渲染,从而加速首屏渲染和实现搜索引擎优化等。

除了这些,Angular 周边也有完善的工具体系:

  • Angular CLI 为开发者提供了工作流自动化解决方案。其功能涵盖了创建项目、生成组件、配置路由、代码格式化、启动开发服务器、构建测试、运行测试、预处理CSS 样式和部署前的构建,等等。
  • 语言服务采用TypeScript 构建,支持IDE 中的代码补全、语法检查报错、定义跳转和方法提示等功能,从而显著提升了开发效率和编译运行前的错误发现。
  • Augury(之前叫Batarangle)用于调试、分析性能和可视化查看应用组件树,是帮助开发者快速定位问题和调优的工具利器。

当然,为了开发强大的应用,Angular 在功能开发上也提供了不少辅助模块,例如:

  • i18n 模块,用于语言国际化、符号时间等本地化。
  • 路由模块,用于构建多界面状态的单页应用。
  • 动画模块,提供了基于声明式的书写体验和完善Hook 节点的功能。
  • Upgrade 模块,Angular 和AngularJS 1.x 不是孤立的,通过Upgrade 模块(原ngUpgrade)能够方便地将使用1.x 开发的应用升级到2.0 以上,面向未来编码。

3 平台亮点

以上内容先后介绍了Angular 核心概念和Angular 平台提供的各种各样的功能,那么Angular 相对于其他前端技术有什么特点呢?

它拥有超快的性能:

  • 优化渲染速度,更快地检测变化,内部拥有性能基准的测试框架。
  • 对视图进行缓存,从而实现列表流畅滚动和页面切换如丝般顺滑。
  • 首屏加载更快,使用服务端渲染和小型启动库使网络加载更快。
  • 移动端响应大幅度提升,原生支持各种手势、触摸等。

其中,Angular 服务端渲染(Server-Side-Render)会在后续章节中进行详细讲解和实践介绍。

它支持完善流畅的开发体验。除上面提到的CLI 工程化的命令行工具、Augury 审查工具和TypeScript 语言服务外,也包括:

  • 官方支持的代码风格指南和检查(Lint / Style 工具)。
  • 可以快速搭建项目的Yeoman Generator、Webpack Starter 等脚手架。
  • 对不同技术背景的开发者提供如Dart、ES 5 等其他语言版本的选择。

    Angular CLI 工程化流程

它的社区和周边也强大多样。除了上面提到的Material Design UI、Mobile Toolkit,还包括:

  • Kendo UI、Onsen UI 2 等UI 库,提供了多样化的界面方案选择。
  • ionic2、NativeScript、React Native 等移动端技术,用来开发跨平台的混合或原生应用。
  • Meteor 等框架,可以用来实现JavaScript 全栈式开发和高效整合。

不得不说,基于最新Angular 的ionic 变得越发强大,是用JavaScript 技术开发移动应用的不错选择。同时,利用最新的PWA (Progressive Web App)Web 技术,能够帮助我们很好地打造移动版网站。因此,在本书后面会用专门的章节来讲解这两个热门话题。这就是你应该立即使用Angular 的原因!

在实际项目中,我们可以使用Angular 提供的模块、组件、模板数据绑定、服务、依赖注入和注解等特性来实施应用开发,Angular 社区也提供了各种辅助周边、功能模块和开发工具等。这最终形成了性能强劲、开发体验完善和社区周边强大的Angular。

读者评论

相关专题

相关博文

  • Kotlin 初体验:主要特征与应用

    Kotlin 初体验:主要特征与应用

    管理员账号 2017-08-15

    小编说:Kotlin 是一种针对 Java 平台的新编程语言。它简洁、安全、务实,并且专注于与 Java 代码的互操作性。它几乎可以用在现在 Java 使用的任何地方 :服务器端开发、Android 应用,等等。本文我们将详细地探讨 ...

    管理员账号 2017-08-15
    1354 0 0 0
  • 6种常用View 的滑动方法

    6种常用View 的滑动方法

    管理员账号 2017-08-01

    小编说:View 的滑动是Android 实现自定义控件的基础,实现View 滑动有很多种方法,在这里主要讲解6 种滑动方法,分别是layout()、offsetLeftAndRight()与offsetTopAndBottom()、...

    管理员账号 2017-08-01
    1085 0 0 0
  • #小编推书#快速高效地展炫酷动画效果

    管理员账号 2017-02-13

    小编说 目前,APP Store上的应用已经超过150万个,而纵观排名较为靠前的应用,无一例外都有着一个共同的特点,那就是良好的用户体验。动画作为用户体验中最复杂、最绚丽的技术已经备受开发人员和产品设计人员的重视。而如何将炫酷的动画...

    管理员账号 2017-02-13
    400 0 0 0