跟着官方示例项目学Ionic-1

针对Ionic-4

传送门
跟着官方示例项目学Ionic-1(blank,tabs)
跟着官方示例项目学Ionic-2(tutorial,sidemenu)
跟着官方示例项目学Ionic-3(super)
跟着官方示例项目学Ionic-4(conference)

写在前面

最近在学Ionic,在通读了Ionic官网的文档后,大致了解了Ionic主要工作内容:

  1. 在Angular的基础上,提供了更适合移动开发的一系列组件.(menu,nav,card等).
  2. 在cordova的基础上,提供了cordova插件的Typescipt封装,使得调用cordova插件更容易.
  3. 提供了一组图标和主题,是的生成的移动应用更美观.

然后,仅仅了解个大概可不算学会了Ionic,程序员学习,提高最直接的方法就是阅读源码,特别是写的好的源码,所幸Ionic官方提供了好几套的示例程序,接前Ionic程序在vs code中断点调试之后,我对几个starter的源代码进行了阅读,通过代码阅读,对Ionic如何进行组件(compoent)和插件(plugin)的调用,程序的运行情况有了更深入的了解.

starer 示例

Starter Description 备注
blank A blank starter project 空白项目(略过)
tabs A starting project with a simple tabbed interface 包含底部分页的项目
sidemenu A starting project with a side menu with navigation in the content area 包含滑动菜单的项目
tutorial A tutorial based project that goes along with the Ionic 基本的Ionic教程项目
super A starting project complete with pre-built pages, providers and best practices for Ionic development. 包含推荐的开发实践的完整项目(页面,服务划分等)
conference A project that demonstrates a realworld application documentation 一个真实的演示项目
aws AWS Mobile Hub Starter Amazon 移动应用

可以看出,前面4个是入门级别的,后面3个相对完整,有一定的借鉴意义.

tabs 工程

tabs 工程是通过官方开始教程构造的项目,Get started with Ionic Framework,
启动tabs可见,这是一个包含3个页面的应用程序,每个页面有标题,内容.

tabs-Home.png

应用的目录结构如下:

ionic-tabs-app/
|
|-- resources/                          * 资源文件,分为Android和Ios
|
|-- src/
|    |-- app/
|    |    ├── app.component.ts          * 入口组件 
|    |    └── app.module.ts             * 主模块
|    |    └── app.html                  * 主组件页面布局
|    |    └── app.scss                  * 全局Sass
|    |    └── main.ts                   * 主程序   
|    |
|    |-- assets/
|    |    ├── icon/
|    |    |    └── favicon.ico          * 页面图标
|    |    |
|    |    └── imgs/
|    |         └── logo.png             * 程序logo
|    |
|    |-- pages/                          * 包含所有的页面
│    │    ├── about/                     * 关于页面 page 
│    │    │    ├── about.html            * 关于页面 template
│    │    │    └── about.ts              * 关于页面 code
│    │    │    └── about.scss            * 关于页面 stylesheet
│    │    │
│    │    ├── contact/                   * 联系人页面 page
│    │    │    ├── contact.html          * 联系人页面 template
│    │    │    └── contact.ts            * 联系人页面 code
│    │    │    └── contact.scss          * 联系人页面stylesheet
│    │    │
│    │    │── home/                     * 主页面 page
│    │    │    ├── home.html            * 主页面 template
│    │    │    └── home.ts              * 主页面 code
│    │    │    └── home.scss            * 主页面 stylesheet
│    │    │
│    │    │
│    │    │── tabs/                      * 分页 page
│    │    │    ├── tabs.html             * 分页 template
│    │    │    └── tabs.ts               * 分页 code
|    |
│    ├── providers/                      * 包含所有的可注入服务
|    |
│    ├── theme/                          * 应用主题文件
|    |     ├── variables.scss            * 应用scss变量
|    |
|    └-- index.html
|
|-- typings/                             * JavaScript 类型声明
|    └── cordova-typings.d.ts            
|
|-- www/                                 * ionic serve 运行时候生成站点目录
|    ├── assets/
|    |    ├── data/
|    |    |
|    |    ├── fonts/
|    |    |
|    |    ├── img/
|    |
|    │── build/
|    |
|    │── index.html
|    |
|    │── manifest.json
|    |
|    └── service-worker.js
|
├── .editorconfig                       * 代码风格
├── .gitignore                          * git忽略文件
├── LICENSE                             * License 文件
├── README.md                           * Readme
├── config.xml                          * Cordova 配置文件
├── ionic.config.json                   * Ionic 配置文件
├── package.json                        * Javascript 工程文件
├── tsconfig.json                       * typescript 编译配置文件
├── tslint.json                         * TypeScript 书写规范规则文件

所有的ionic工程结构都大致如此,随着项目的复杂,pages和providers会有更多的东西.

index.html

与普通的angular区别不大,body中使用ion-app作为程序的入口

<ion-app></ion-app>

app目录

  1. appModule.ts
    a. 引入的ionic模块有:
import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';

在@NgModule中可以看出,和普通的Angular不同,程序的主component并不是我们自己写的组件,而是IonicApp,它的template就是<ion-app>,然后通过给IonicModule传递MyApp的方式,把我们自己写的组件启动起来.

  imports: [
    BrowserModule,
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
b. 引入的ionic-native有:
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';

包括StatusBar和SplashScreen

  1. app.html
    仅一行代码
<ion-nav [root]="rootPage"></ion-nav>

<ion-nav>导航组件作为Tab项目的主compent,提供了移动端的标准栈式导航.
Navigation-doc

ion-nav-element.png

从生成的页面中能发现,实际上ionic会把<ion-nav>包装到<ion-app>之中.

  1. app.component.ts
  rootPage:any = TabsPage;
  
  constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen) {
    platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      statusBar.styleDefault();
      splashScreen.hide();
    });
  }

做了2件事,给ion-nav组件传入root页面为Tabs页面.构造器传入platform,statusBar,splashScreen.这是一个很标准实现,当平台准备就绪之后,给状态栏设置默认样式,隐藏启动界面.

P.S. splash的图片怎么设置?
在cordova的配置文件config.xml中,对不同的平台有不同的<splash>

tabs目录

代码很少,核心就是<ion-tabs>以及<ion-tab>,结合官方文档
Tabs-doc,每个tab配置有tabTitle标题,tabIcon图标,[root]每个分页的根页面.这里分别指向了HomePage,AboutPage,ContactPage三个页面.

tabs-page.png

about,contact,home目录

  1. html文件
    每个页面都很标准,以相对复杂的contact为例
<!-- 头部 -->
<ion-header>        
  <!-- title要嵌入到navbar中 -->
  <ion-navbar>
    <ion-title>
      Contact
    </ion-title>
  </ion-navbar>
</ion-header>

<!-- 内容部份 -->
<ion-content>
  <!-- 通过list 的 list-header 和 item 配合,实现列表显示 -->
  <ion-list>
    <ion-list-header>Follow us on Twitter</ion-list-header>
    <ion-item>
      <ion-icon name="ionic" item-start></ion-icon>
      @ionicframework
    </ion-item>
  </ion-list>
</ion-content>

  1. ts文件
constructor(public navCtrl: NavController) {
  }

都传入了NavController,这个是由<ion-nav>组件创建并初始化的,作为一个Provider传入page后,用它能让页面实现跳转,由于tab项目中的几个都是单页面,所以实际并没有用到.

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

推荐阅读更多精彩内容