这也意味着Angular 1的组件通常会使用Angular 1的依赖注入。即使在使用Angular 2的模板时,Angular 2组件也会使用Angular 2的依赖注入,即使它是使用Angular 1的模板。
把Angular 1的组件和Angular 2的组件混合起来意味着Angular 1的作用范围和Angular 2的组件是交错的。因此,ng-upgrade会确认变化检测(Angular 1的作用范围摘要和Angular 2的变化检测)在相同通道中是否交错,以维持表达式的可预测性的评估命令。
ng-upgrade把这些特点纳入账户,并通过创造一种单独的结合性摘录循环的方法来实现跨平台,以便在Angular 1的作用范围摘要和Angular 2的变化检测建立联系。
典型的应用升级过程
这里有一个Angular 1项目升级为 Angular 2 的例子:
1. 在现有的应用中包含 Angular 2 和 ng-upgrade 的库。
2. 选择你想迁移的组件。
a. 编辑 Angular 1 的指令控制器去顺应 Angular 2 的语法。
b. 改变指令控制器/连接函数改变令其符合 Angular 2 的语法和语义。
c. 利用 ng-upgrade 去输出指令(现在是组件)作为 Angular 1 的组件(如果需要你可以称之为从Angular 1 模板衍生的 Angular 2 的组件)。
3. 选择你想迁移的服务。
a. 大多数的服务要求最低限度的修改。
b. 在 Angular 2 环境下配置服务。
c.(可选的)不使用 ng-upgrade 再输出服务到使用 ng-upgrade 的 Angular 1,如果它还继续被其他 Angular 1 代码使用。
4. 重复第2步骤和第3步骤以便于应用开发
5. 一旦没有多余的服务/组件被用来变更,把高层次的 Angular 1 引导程序降下,更换为 Angular 2的引导程序。
注意每个独立的变更会分别地被检查。并且,应用会持续地工作,让你随心所欲地继续发布升级。
我们不打算因为允许非组件的指令能够在两边被使用而提供支持。因为我们想到,大多数的非组件的指令在 Angular 2 中是不必要的,但在新的模板语法中是被直接支持的。
Q&A
我听说 Angular 2 不支持双方法连接。我应当怎样替换它?
事实上,Angular 2 是支持双方发连接和 ng-model,虽然这需要一点不同的语法。
当我们打算建立起 Angular 时,我们就想修复好与 Angular 摘录循环的发出。为了解决这个问题,我们选择创建一个非直接的数据流用作于变化检测。一开始,我们还不清楚怎样用双方法在 Angular 1 中来构建起 ng-model 的数据绑定。但我们总是认为我们必须令 Angular 2 中构建如同 Angular 1 的一样简单。
经过几次循环后,我们设法修复多摘录中坏掉的地方,同时保持 Angular 1 中 ng-model 的强力和简易性。
双方法数据绑定有了一个新语法:[(property-name)]="expression"来令表达式在各方位中的界限更加明确。由于能够应用与大多数场景,这只不过是一个微小的语法更改,能够轻易地进行迁移。
如下面的例子,在 Angular 1 中,你会有:
<input type="text" ng-model="model.name" />
在 Angular 2 中,你可以把上面的例子转换为这样:
<input type="text" [(ng-model)]="model.name" />
我能用什么语言搭配 Angular 2 使用?
Angular 2 的 API 完全支持现在的 JavaScript(ES5标准),下一个版本的 JavaScript(ES6标准或ES2015),TypeScript 和 Dart。
继续使用现在的 JavaScript 是非常好的选择,我们强烈建议你深入研究一下 ES6 和 TypeScript(ES6的一个超级集合),这些会为你的产品带来强大的提升。
ES6 为常用库,比如协议和模组,提供了很多提升性的语法和标准。TypeScript 能为你带来更好的代码导航,IDE 中的自动重构,文件,查找错误,等等。
ES6 和 TypeScript 作为现在 ES5 的超级集合,十分简单易用。这意味着你现有的全部代码是有效的,并且能为它们添加一些新特性。
我应该利用代码库中的$watch做什么?
为了得到运行速度和可预测性,在 Angular 2 中,通过在 HTML 模板中或者组件指令中的注释中申明地指定要看的表达式。
在很多应用与性能不相适的场合下, 你可以从 ES7 标准的可见性中,比如 JavaScript 中的 Rx.js 或者Dart 中的 Streams,获得可见性的好处。
现在我能为应用的版本迁移做什么准备
模仿最好的实例,并使用 Angular 1 的组件和服务来构建你的应用,就像 AngularJS 样式指南中所描述的。
原生升级能否使用新的组件路由器?
我们在 ng-conf2015 告知的升级计划是基于某时间段中全视图的升级,和两个版本的 Angular 中的组间路由器的控制通讯。
我们得到的反馈是“好的,这具有增量性,但增量性还不够。我们又重新设计如上的计划。
有更多的细节你能够透露吗?
当然是的!在升级 Angular 1 到 Angular 2 的策略设计文档。
我们在编写一系列即将发布的公告,相关主题包括如下:
再回!