Ionic3新特性--页面懒加载1

Ionic3新的懒加载机制给我带来了以下新特性:javascript

  1. 避免在每个使用到某PageModule或其余Page中重复的import这个类(须要写一堆路径)
  2. 容许咱们经过字符串key在任何想使用的地方获取某一Page;
  3. 经过以上两点让咱们的代码更简洁;
  4. 懒加载,客户响应度更好,体验更友好的加载,更快的响应。这个是我认为的带来的最好的特性;
  5. 让开发过程实时编译更快。

下面咱们对比的看看老的方式和新的懒加载方式的实现。html

环境描述:
Ionic CLI: 3.1.2java

1. 老的加载方式实现

首先咱们在terminal中经过以下命令建立一个新的Ionic3的应用:shell

ionic start routy tabs --v2

这里建立了一个Ionic3的app,来看一下app.module.ts的定义:app

import { AboutPage } from '../pages/about/about';
import { ContactPage } from '../pages/contact/contact';
import { HomePage } from '../pages/home/home';
import { TabsPage } from '../pages/tabs/tabs';

@NgModule({
  declarations: [
    MyApp,
    AboutPage,
    ContactPage,
    HomePage,
    TabsPage
  ],
  ...
  entryComponents: [
    MyApp,
    AboutPage,
    ContactPage,
    HomePage,
    TabsPage
  ]
})

每次咱们建立一个新的Page,咱们须要在app.moudle.ts中添加对应的import和声明。
************
一样,在Main Component中,也须要一样的引入:less

import { TabsPage } from '../pages/tabs/tabs';

@Component({
  templateUrl: 'app.html'
})
export class MyApp {
  rootPage:any = TabsPage;
  ...
}

这里当须要设置rootPage时,也须要经过import来引入对应Page
************
一样的对于navigation也须要进行导航Pageimportionic

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { AboutPage } from '../about/about';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

  constructor(public navCtrl: NavController) {

  }
  
  ngOnInit() {
    this.navCtrl.push(AboutPage);
  }
}

这里咱们须要在经过NavController导航前,import AboutPage模块化

2. 新的懒加载的方式实现

咱们能够看到,基于我当前的最新的Ionic CLI的版本(3.1.2),建立的新工程里面的默认页面不是基于Lazy Load的。
而后咱们经过命令新建立一个page试试:测试

ionic g page options

注意,这个命令要在当前工程根目录下执行。
建立完成后,咱们就在pages文件夹下拥有了一个新的OptionsPage:
pages/options/options.tsui

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';

/**
 * Generated class for the OptionsPage page.
 *
 * See http://ionicframework.com/docs/components/#navigation for more info
 * on Ionic pages and navigation.
 */
@IonicPage()
@Component({
  selector: 'page-options',
  templateUrl: 'options.html',
})
export class OptionsPage {
    ...
}

能够看到与之前建立的Page不一样的是,增长了一个@IonicPage装饰器。
而且在同一个文件夹内,咱们能够看到还自动生成了一个新的名为OptionsPageModuleModule
pages/options/options.module.ts

import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { OptionsPage } from './options';

@NgModule({
  declarations: [
    OptionsPage,
  ],
  imports: [
    IonicPageModule.forChild(OptionsPage),
  ],
  exports: [
    OptionsPage
  ]
})
export class OptionsPageModule {}

好了,到此为止,就是咱们引入一个新的Page所须要作的全部事情,剩下的就是直接使用了,咱们简单总结一下:

  1. 建立一个Component,而且经过@IonicPage()装饰器进行装饰;
  2. 建立一个Module,在其中引入建立的Page,而且经过IonicPageModule.forChild(OptionsPage)在全局中声明这个Page。
    好了,咱们能够在其余页面中使用了。
    *********
    咱们在pages/home/home.ts中增长以下代码:
goToOption():void{
  this.navCtrl.push('OptionsPage');
}

注意这里,调用的时候也有改变,咱们只须要传递一个字符串,这个字符串默认就是Page对应的类名。
而后在pages/home/home.html中增长按钮,经过点击来触发上面的方法:

<button ion-button secondary (click)="goToOption()">懒加载</button>

而后咱们就能够经过Chrome跟踪一下是否真正实现了懒加载,在www目录下能够看到下图:

增长了一个0.main.js文件,这里面就是咱们的OptionsPage声明。
***********
好了,让咱们能够经过将默认的页面也都改为这种模式,修改后app.module.ts变得很是简洁:

@NgModule({
  declarations: [
    MyApp
  ]
  ...
  entryComponents: [
    MyApp
  ]
  ...
})

固然别忘了,将相应的路由的位置的类名,修改成对应的字符串名:
app.component.ts:

export class MyApp {
  rootPage:any = "Tabs";
  ...
}

tabs.ts:

export class Tabs {
  tab1Root = "Home";
  tab2Root = "About";
  tab3Root = "Contact";
  ...
}

总结一下

做为Ionic3推出的最重要的特性,经测试,当前基于3.1.2的最新Ionic CLI已经彻底稳定的支持Lazy Loaded Pages,其在解决项目加载慢的同时,也大大的简化了咱们代码量。可是仍是有一些设计上的问题须要解决,固然设计上的事情,没有银弹,咱们仍是能够根据具体状况具体的处理。
less code, less imports, less paths to remember: The less, the better!
注意:只能是在基于NavController导航的Page能够实现懒加载,若是做为Component使用(直接在html中使用selector做为标签使用),仍是要采用老的加载机制。可是官方依然推荐咱们对ComponentPipe等进行模块化处理,后续会继续说明这一点。

本文翻译自Ionic 3 New Pages Lazy Loading并根据我的理解完善,并根据最新的状况对一些内容进行了修改。

相关文章
相关标签/搜索