您好SO社区和Angularians!
因此,我正在Angular 2中开发一个巨大的平台 . 我意识到Angular 2的许多外部库和依赖项正在迁移到新的Angular 4.很明显,给了我许多错误 .
我可以分叉这些库并使用分叉版本并订阅主库开发,或者我可以升级到Angular 4我的项目 .
要回答的问题是为了确定我是否值得迁移:
- Compatibility with Angular 2.4
我找到了一些调整以确保与遗留的兼容性,如下所示:https://github.com/angular/angular/commit/e99d721
- Changes app wide
我是否必须完成整个应用程序并开始修复?
我的意思是,主要功能是否以这样的方式重新设计,我将不得不审查其中的许多功能?
或者,是否有许多构建/核心不兼容性,这将使我几天占用修复编译错误/警告而不是开发?
I am not asking for someone to do the research for me ,我问人们可能已经完成了这个过程,或者只是熟悉两个版本,以便给我一些经验提示,澄清等 .
目前,我在这里做研究:
-
http://angularjs.blogspot.it/2017/03/angular-400-now-available.html
-
https://learninglaravel.net/angular-4-new-features-and-improvements
UPDATE
I just migrated to Angular 4 . @PierreDuc在他的回答中提供的链接是一个非常好的工具,可以在迁移过程中获得合适的指导 .
我建议:
-
阅读新功能并使用Angular 4更新自己 . 这特别有用:https://angularjs.blogspot.it/2017/03/angular-400-now-available.html
-
遵循Angular的指南并修改您的项目:https://angular-update-guide.firebaseapp.com/
我还建议您提交当前项目,在dev存储库中创建一个新分支,然后继续在该分支中进行迁移 .
An issue that I encountered :Input
, Output
和 ContentChild
将从错误的路径导入 .
我的情况:
import { Component, OnInit, OnDestro } from '@angular/core';
import { Input, ContentChild } from "@angular/core/src/metadata/directives";
解:
import { Component, OnInit, OnDestroy, Input, ContentChild } from '@angular/core';
3 回答
如果您查看更改日志,则需要记住以下几点:
Before updating
确保不使用extends
OnInit
,或对任何生命周期事件使用extends . 而是使用implements <lifecycle event>
.停止使用
DefaultIterableDiffer
,KeyValueDiffers#factories
或IterableDiffers#factories
停止使用深度导入,这些符号现在标有
ɵ
,不属于我们的公共API .停止使用
Renderer.invokeElementMethod
,因为此方法已被删除 . 目前没有替代品 .During the update
将所有依赖项更新到版本4和最新的打字稿 .
如果您使用的是Linux / Mac,则可以使用:
npm install @angular/{animations,common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router}@4.0.0 typescript@latest --save
如果您在应用程序中使用动画,则应在App
NgModule
中从@angular/platform-browser/animations
导入BrowserAnimationsModule
.将
RootRenderer
替换为RendererFactory2
.将
Renderer
替换为Renderer2
.After the update
将
template
标记重命名为ng-template
.将
OpaqueTokens
替换为InjectionTokens
.如果您调用
DifferFactory.create(...)
删除ChangeDetectorRef
参数 .将
ngOutletContext
替换为ngTemplateOutletContext
.将
CollectionChangeRecord
替换为IterableChangeRecord
source
Angular团队宣布,让我们不要调用角度2或角度4让我们称之为Angular,并且每6个月会有一次重大更新 . 我在角度v4.0.0中遇到了问题所以更改webpack中的配置
并在app.module.ts文件中安装 @angular/animations 包并导入
我更愿意更新到最新版本的角度 . Angular V4.0.0降低了包装重量,提高了性能 .
这是一个很好的12分钟视频,演示如何migrate from angular 2 to angular 4 . 说和完成有3个基本步骤: -
1)删除旧的node_modules文件夹以避免对2.X的任何引用
2)在package.json中将所有@angular更改为4.0.0并进行NPM安装 . 如果可能,请清除缓存 .
3)在进行NPM安装时,很可能会出现对等版本不匹配的情况 . 纠正它 . 以上视频介绍了如何修复同伴不匹配问题 .
正如上面的答案中所说,你需要为事件等实现接口 . 出于某种原因,我没有遇到任何问题,事件就像以前在Angular 2中那样有效 .