ionic3升级适配angular5

昨天angular5和ionic3同时发布更新了,为了用上angular5的新特性,还是有必要踩下坑的,当然踩坑的白老鼠建议选用一个最近不用维护的项目。

先看下ionic3的更新版本,同一天发布了三个版本,后两个版本都是修复一两个小bug的。

ionic3最新版本
首次支持angular5的ionic3版本

然后再看下angular5的版本,同样发布了两个版本,一个是普通稳定版,一个是beta版,其中前者如图所示修复了几个bug,那若升级,当然选择普通稳定版比较好。

angular5普通最新版
angular5的最新beta版

在ionic3官网建议是更新依赖到angular5.0.0版本,而根据上述说明,优先选择做了做了bug修复的angular5.0.1版。

于是我们升级的步骤如下:

一、更新包依赖

删除package-lock.jsonnode_modules,然后修改package.json如下:

"dependencies" : {
  ...
  "@angular/common": "5.0.1",
  "@angular/compiler": "5.0.1",
  "@angular/compiler-cli": "5.0.1",
  "@angular/core": "5.0.1",
  "@angular/forms": "5.0.1",
  "@angular/http": "5.0.1",
  "@angular/platform-browser": "5.0.1",
  "@angular/platform-browser-dynamic": "5.0.1",
  "@ionic/storage": "2.1.3",
  "ionic-angular": "3.9.2",
  "rxjs": "5.5.2",
  "zone.js": "0.8.18"
  ...
},
"devDependencies: {
  "@ionic/app-scripts": "3.1.0"
  "typescript" : "2.4.2"
}

接着执行命令重新安装依赖:

npm install

二、修改项目文件

我们可以先看下angular5的更新说明:


更改内容:

  • I18n更改;
  • 内置管道如Date、Currency、Percent的更改;

弃用内容:

  • compiler: ngGetContentSelectors()在v4版本被移除,现在用ComponentFactory.ngContentSelectors代替.
  • compiler: <template>在v4版本被弃用,使用 <ng-template>代替,其编译选项enableLegacyTemplate也已经失效;
  • compiler: 编译选项useDebug从v4版本已经弃用且无效,现在移除;
  • common: NgFor在v4版本被弃用,现用NgForOf代替,但不影响在模版中使用*ngFor;
  • common: NgTemplateOutlet#ngOutletContext在v4版本被弃用,使用NgTemplateOutlet#ngTemplateOutletContext代替;
  • core: ErrorHandler在v4版本被弃用,现在它不再带参数;
  • core: ReflectiveInjector现在被弃用,使用 Injector.create 代替;
  • core: Testability#findBindings在v4版本被弃用,现在已经移除,用Testability#findProviders代替;
  • core: DebugNode#source在v4版本被弃用,现在已经移除;
  • core: OpaqueToken在v4版本被弃用,现在已经移除,用InjectionToken代替;
  • core: DifferFactory.create在v4被弃用,现不再把ChangeDetectionRef作为第一个参数。
  • core: TrackByFn在v4版本被弃用并移除,现用TrackByFunction代替;
  • http: 弃用 @angular/http,转为使用@angular/common/http;
  • router: RouterOutlet的两个属性locationInjector、locationFactoryResolver在v4版本被弃用,现移除;
  • router: 路由参数initialNavigation的值:true, false, legacy_enabled 、legacy_disabled由于弃用而移除,现使用enabled、disabled代替;
  • platform-browser: NgProbeToken自v4版本被弃用,现从@angular/platform-browser移除,换从 @angular/core导入;
  • platform-webworker: PRIMITIVE 自v4版本被弃用,现在移除,用SerializerTypes.PRIMITIVE代替;

看上去内容很多,但不要被吓到,因为从内核级别看是改动比较多,但从项目应用上只是个别地方要调整,基本向下兼容,故angular4到angular5的项目升级的过程还是比较平缓的,对于大多数项目,主要应对的是Http模块、Router还有管道的变更。

在本项目中,因为没有用到那几个内置管道,也没有用到路由,所以主要是调整Http模块:

在4.x中HttpClient模块被封装在@angular/common中,新的HttpClient被封装在@angular/common/http中,更新Http模块后,需要使用HttpClientModule替换原有HttpModule,并在使用http服务时,可以去掉map(res=>res.json())的调用,因为新模块中已经不再需要了。

首先app.module.ts中,把import { HttpModule } from '@angular/http';替换为下述内容:

import { HttpClientModule } from '@angular/common/http';

同样在import里替换 HttpModuleHttpClientModule

imports: [
    BrowserModule,
    HttpClientModule,
    IonicModule.forRoot(MyApp, {
      mode: 'ios',
      backButtonText: '',
    })
  ]

接着把调用http的provider换成:

import { HttpClient } from '@angular/common/http';
……
 constructor(public http: HttpClient) {
  }

若有请求选项,直接用一个any对象(因为原来的RequestOptions已经不用了),如:

let options: any = {headers: new Headers()};

最后删除掉:

map(res=>res.json())

到此就完成了,执行命令看下效果吧:

ionic serve
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容