Angular

Angular（通常是指 "Angular 2+" 或 "Angular v2 及更高版本"）是一个基于TypeScript的开源Web应用框架，由Google的Angular团队以及社区共同开发。Angular是由AngularJS的开发团队完全重写的。

## Angular和AngularJS之间的区别

<image>

在设计上，Angular是AngularJS的完全重写。

- Angular 舍弃了AngularJS中“作用域(`$scope`)”或控制器(Controller)的概念，其架构中的主要角色是一些层次化的组件。
- Angular 具有不同的表达式语法，主要是用 `[]` 来表示属性绑定，以及用 `()` 来表示事件绑定。例如`<input [type]="typeAttr" (blur)="save()" />`。
- 模块化 – 许多核心功能都已模块化，使用时一般分为AppModule(项目模块)和SharedModule(共享/依赖模块)。
- 指令(Directives)，Angular.js的指令只能进行双向数据绑定，而Angular控制严密可以进行单向绑定，生命周期钩子也更加丰富。
- 纯管道(Pure Pipes)，Angular.js的`.filter()`管道触发频繁，而Angular的纯管道只监听管道所绑定的值发生纯变更。
- Angular 建议使用 Microsoft 的 TypeScript 语言，该语言引入了如下特性：
- 静态类型，包括泛型
- 装饰器，语法上类似于注解
- TypeScript 是 ECMAScript 6 (ES6) 的超集，并且与 ECMAScript 5 (即 JavaScript) 向下兼容。
- 动态加载
- 异步模板编译
- RxJS 提供了迭代式回调。RxJS 在状态可见性和调试方面有局限，不过可以使用诸如 ngReact 或 ngrx 之类的响应式第三方库来解决这些问题。
- 支持 Angular Universal，它可以在服务器上运行 Angular 应用程序。
- 支持HMR（热模块替换）（在v19以上版本），将编译修改的样式或模板直接发送到浏览器，无需刷新页面，不会丢失任何状态。

## 历史

### 命名

最初，团队将这份 AngularJS 的重写版本称为 “Angular 2”，但这在开发人员之间引起了混乱。为了明确起见，该团队宣布应该为这两个框架分别使用各自的术语，其中 “AngularJS” 专指 1.X 版本，而不带 “JS” 的 “Angular” 则专指版本2及更高版本。

### 版本 2

在2014年10月22~23日的 ng-Europe 会议上发布了Angular 2.0。2.0 版的重大变化在开发人员之间引起了很大争议。2015年4月30日，Angular 开发组宣布 Angular 2 从 Alpha 推进到 Developer Preview。Angular 2 于2015年12月推进至 Beta 版，并于 2016年5月发布了首个 rc 版本。其最终版本于2016年9月14日发布。

### 版本 4

2016年12月13日发布了 Angular 4，它跳过了版本号 3，以免由于路由模块的版本的未和其它模块对齐而造成混淆（路由模块在之前已经作为 v3.3.0 发布了）。其最终版本于2017年3月23日发布。Angular 4 向后兼容 Angular2。

Angular 4.3 版是次要版本，这意味着它没有破坏性变更，是 4.xx 的直接替代品。

版本 4.3 中的特性

- 引入了 HttpClient，这是一个更小、更易于使用且功能更强大的库，可用于发起 HTTP 请求。
- 一些新的路由器生命周期事件，用于追踪守卫和解析过程。生命周期事件（比如 NavigationStart）集合中加入了四个新事件：GuardsCheckStart, GuardsCheckEnd, ResolveStart, ResolveEnd。
- 有条件的禁用动画。

### 版本 5

Angular 5 于2017年11月1日发布。Angular 5 的主要改进包括对渐进式 Web 应用的支持、一个构建优化器，以及一些与 Material Design 相关的改进。

### 版本 6

Angular 6 于2018年5月4日发布。这是一个主版本，其改进重点不在于底层框架，而在于工具链，其目的是让工具链能在将来与 Angular 一起快速发展，改进点主要包括：ng update、ng add、Angular Elements、Angular Material + CDK 组件库、Angular Material 初学者组件、CLI 工作空间、库支持、服务提供商的摇树优化、动画性能改进，以及 RxJS v6。

### 版本 7

Angular 7 于2018年10月18日发布。其升级主要集中在 Angular Material & CDK、虚拟滚动、选择框在无障碍方面的改进、支持对符合 Web 标准的自定义元素进行内容投影，以及对 Typescript 3.1、RxJS 6.3、Node 10 (仍然支持 Node 8) 的依赖库更新。

### 版本 8

Angular 8 于2019年5月28日发布。特性包括：为所有应用代码进行差异化加载、针对惰性加载路由的动态导入、Web workers、支持 TypeScript 3.4，并且把 Angular Ivy 作为可选的预览特性。Angular Ivy 的可选预览特性包括：

- 生成的代码在运行时更易于阅读和调试
- 更快的重新构建
- 改进了有效载荷的大小
- 改进了模板类型检查
- 向后兼容

### 未来的版本

最值得期待的特性之一是 Ivy，它是一个向后兼容的、基于增量式 DOM 架构的全新渲染引擎。Ivy 从设计之初就考虑到了摇树优化，这意味着应用的发布包中只会包含那些在应用中真正用到的 Angular 部件。

可以预期，每一个版本都会向后兼容前一个版本。Google 承诺每年会进行两次升级。

### 支持政策与时间表

所有主版本都提供了 18 个月的支持。其中包括 6 个月的活跃支持，在此期间会定期发布更新和补丁。然后是12个月的长期支持（LTS），在此期间只会发布关键修复程序和安全补丁。

## 程式库

### Angular Material

Angular Material 是一个 UI 组件库，属于 Official components for Angular 的一部分，它在 Angular 中实现了 Material Design。

Angular Material的侧重点在于提供跨平台一致的、适配国际化的组件库。

2024年5月23日发布了v18.0.0，代号satin-sasquatch(缎面大脚怪)，添加了基于M3的预建主题，将所有的SCSS变量和CSS变量加上m2_的前缀。

2024年11月20日发布了v19.0.0，代号hafnium-hippo(铪河马)，适配了支持增量水合和HMR的Angular19，共有37款组件。

## 另请参阅

- AngularJS
- React.js
- Vue.js
- Svelte
- Web应用框架

## 基本资料

- 开发者：Google
- 发行日期：2.0 / 2016年9月14日
- 编程语言：TypeScript
- 平台：Web 平台
- 类型：Web应用框架
- 许可协议：MIT许可证