Angular 2 的变化

Flying
2017-01-04 / 0 评论 / 141 阅读 / 正在检测是否收录...

AngularJS 2.0 正式版本推出以后,AngularJS 1.x 统称为沿用以前的称法,AngularJS 2.x 及以上版本统称为 Angular。AngularJS 官网继续沿用以前的地址,Angular 则使用了新地址:https://angular.io

release-angular.svg

AngularJS 有哪些主要特性呢?MVC、双向数据绑定、指令。可能给我们最印象最深的是双向数据绑定,不过这也是它的诟病,脏值检测机制会导致性能调优困难。而且使用 AngularJS 还要消化一大堆概念:Module、Scope、Controller、Injector、Service、Factory、Provider、Filter,初学者没几个不吐槽的吧?好消息是,Angular 对这些概念进行了简化,同时以 Compoent 为核心,和 React、Vue.js 一样,Compoent 才是现代 Web 开发方向。相比 AngularJS,Angular 具体有哪些重要变化呢?

一、Angular 删掉了$scope 的概念

在 AngularJS 里面,$scope 是一个相当强大又相当可怕的东西,由于在很多需要回调的场景之下,脏值检测机制无法感知到$scope 上发生的变化,因此经常需要开发者自己手动调用 $apply() 方法。典型的场景有:事件回调、setTimeout 回调、Ajax 回调等等。Angular 响应社区的强烈呼吁,删除(或者说隐藏)了$scope 的概念,开发者不再需要感知到它的存在。另外,Angular 在底层引入了 zone.js,所以即使在各种回调函数中修改数据模型也不需要手动调用 $apply() 方法了。

二、删掉了 ng-controller 指令

这就意味着 Controller 不再是一个独立的组件,它合并到 Component 内部。Component/Directive 中也有 Controller,而且套装性更好,为什么要多维护一个指令呢?这是一个非常大的演进,因为从大量的实战经验来看,在复杂的业务逻辑中复用 Controller 几乎是不可能的。

三、大幅度改进了脏值检测机制

众所周知,“双向数据绑定”之所以能运行,是因为 Angular 底层有“脏值检测”这么一个神奇的机制。而实际上 AngularJS 里面的脏值检测机制的运行效率非常差,这就是为什么大家一直在抱怨绑定的对象不能太多、太深的原因。Angular 大幅度改进了这一机制,不仅引入了单向绑定,还增加了各种检测策略,例如:只检测一次、利用 JIT 动态生成脏值检测代码等等。毫无疑问,有了这些工具之后,数据绑定效率不再是问题。

四、嵌套路由

AngularJS 自带的路由机制不支持嵌套使用功能很阳春,这就导致开发者在日常的开发过程中不得不依赖于第三方的 ui-router 库。Angular 没有这个问题了,因为 Angular 的路由是基于 Component 的,天然支持嵌套。

五、依赖注入机制演进

Angular 中的依赖注入写法与 Java 中的注解(Annotation)非常类似,如果你熟悉 Spring 注解的用法,那么使用 Angular 的依赖注入几乎没有学习成本。当然概念上是有区别的,Angular(ES6 提案)中叫 Decorator(装饰器),更加贴近 Python 里面的 Decorator 的概念。

六、框架整体上基于 TypeScript 开发

这是最大的一个变更,有很多人担忧这样是否会带来比较大的学习成本,实际的情况并非如此。因为 TypeScript 的语法与 ActionScript 或者 C#非常类似,因此对于从 Flash 或后端转过来的开发者来说,学习这门语言几乎是没有难度的。还有一个重要的方面需要大家注意:TypeScript 是 Microsoft 开发的一门语言,Google + Microsoft 这样的组合会产生多么强大的推动力,大家可以想象。Google 和 Microsoft 本身都是重要的浏览器厂商,Chrome 和 IE 加起来的市场份额占据了一大半的市场份额,未来如果两款浏览器内建 TypeScript 引擎,很显然 TypeScript 和 Angular 的前景将会一片光明。这一优势是大量的同类技术框架根本无法企及的,因此大家在做技术选型的过程中需要综合考虑这些情况作出理性的决策。

值得一提到的是,AngularJS 和 Angular 两个版本的都有 Material 控件库,该 UI 控件库都实现了 Material Design 所提出来的设计风格,Material Design 是 Google 提出来的一种 UI 设计原则,终极的目标是:用一套 UI 设计规范来兼容各种各样的设备,例如桌面、平板、大屏幕的电视、车载系统、甚至 watch,从而保证用户体验的一致性。

7

评论 (0)

取消