跟著官方示例項(xiàng)目學(xué)Ionic-1

針對(duì)Ionic-4

傳送門(mén)
跟著官方示例項(xiàng)目學(xué)Ionic-1(blank,tabs)
跟著官方示例項(xiàng)目學(xué)Ionic-2(tutorial,sidemenu)
跟著官方示例項(xiàng)目學(xué)Ionic-3(super)
跟著官方示例項(xiàng)目學(xué)Ionic-4(conference)

寫(xiě)在前面

最近在學(xué)Ionic,在通讀了Ionic官網(wǎng)的文檔后,大致了解了Ionic主要工作內(nèi)容:

  1. 在Angular的基礎(chǔ)上,提供了更適合移動(dòng)開(kāi)發(fā)的一系列組件.(menu,nav,card等).
  2. 在cordova的基礎(chǔ)上,提供了cordova插件的Typescipt封裝,使得調(diào)用cordova插件更容易.
  3. 提供了一組圖標(biāo)和主題,是的生成的移動(dòng)應(yīng)用更美觀.

然后,僅僅了解個(gè)大概可不算學(xué)會(huì)了Ionic,程序員學(xué)習(xí),提高最直接的方法就是閱讀源碼,特別是寫(xiě)的好的源碼,所幸Ionic官方提供了好幾套的示例程序,接前Ionic程序在vs code中斷點(diǎn)調(diào)試之后,我對(duì)幾個(gè)starter的源代碼進(jìn)行了閱讀,通過(guò)代碼閱讀,對(duì)Ionic如何進(jìn)行組件(compoent)和插件(plugin)的調(diào)用,程序的運(yùn)行情況有了更深入的了解.

starer 示例

Starter Description 備注
blank A blank starter project 空白項(xiàng)目(略過(guò))
tabs A starting project with a simple tabbed interface 包含底部分頁(yè)的項(xiàng)目
sidemenu A starting project with a side menu with navigation in the content area 包含滑動(dòng)菜單的項(xiàng)目
tutorial A tutorial based project that goes along with the Ionic 基本的Ionic教程項(xiàng)目
super A starting project complete with pre-built pages, providers and best practices for Ionic development. 包含推薦的開(kāi)發(fā)實(shí)踐的完整項(xiàng)目(頁(yè)面,服務(wù)劃分等)
conference A project that demonstrates a realworld application documentation 一個(gè)真實(shí)的演示項(xiàng)目
aws AWS Mobile Hub Starter Amazon 移動(dòng)應(yīng)用

可以看出,前面4個(gè)是入門(mén)級(jí)別的,后面3個(gè)相對(duì)完整,有一定的借鑒意義.

tabs 工程

tabs 工程是通過(guò)官方開(kāi)始教程構(gòu)造的項(xiàng)目,Get started with Ionic Framework,
啟動(dòng)tabs可見(jiàn),這是一個(gè)包含3個(gè)頁(yè)面的應(yīng)用程序,每個(gè)頁(yè)面有標(biāo)題,內(nèi)容.

tabs-Home.png

應(yīng)用的目錄結(jié)構(gòu)如下:

ionic-tabs-app/
|
|-- resources/                          * 資源文件,分為Android和Ios
|
|-- src/
|    |-- app/
|    |    ├── app.component.ts          * 入口組件 
|    |    └── app.module.ts             * 主模塊
|    |    └── app.html                  * 主組件頁(yè)面布局
|    |    └── app.scss                  * 全局Sass
|    |    └── main.ts                   * 主程序   
|    |
|    |-- assets/
|    |    ├── icon/
|    |    |    └── favicon.ico          * 頁(yè)面圖標(biāo)
|    |    |
|    |    └── imgs/
|    |         └── logo.png             * 程序logo
|    |
|    |-- pages/                          * 包含所有的頁(yè)面
│    │    ├── about/                     * 關(guān)于頁(yè)面 page 
│    │    │    ├── about.html            * 關(guān)于頁(yè)面 template
│    │    │    └── about.ts              * 關(guān)于頁(yè)面 code
│    │    │    └── about.scss            * 關(guān)于頁(yè)面 stylesheet
│    │    │
│    │    ├── contact/                   * 聯(lián)系人頁(yè)面 page
│    │    │    ├── contact.html          * 聯(lián)系人頁(yè)面 template
│    │    │    └── contact.ts            * 聯(lián)系人頁(yè)面 code
│    │    │    └── contact.scss          * 聯(lián)系人頁(yè)面stylesheet
│    │    │
│    │    │── home/                     * 主頁(yè)面 page
│    │    │    ├── home.html            * 主頁(yè)面 template
│    │    │    └── home.ts              * 主頁(yè)面 code
│    │    │    └── home.scss            * 主頁(yè)面 stylesheet
│    │    │
│    │    │
│    │    │── tabs/                      * 分頁(yè) page
│    │    │    ├── tabs.html             * 分頁(yè) template
│    │    │    └── tabs.ts               * 分頁(yè) code
|    |
│    ├── providers/                      * 包含所有的可注入服務(wù)
|    |
│    ├── theme/                          * 應(yīng)用主題文件
|    |     ├── variables.scss            * 應(yīng)用scss變量
|    |
|    └-- index.html
|
|-- typings/                             * JavaScript 類(lèi)型聲明
|    └── cordova-typings.d.ts            
|
|-- www/                                 * ionic serve 運(yùn)行時(shí)候生成站點(diǎn)目錄
|    ├── assets/
|    |    ├── data/
|    |    |
|    |    ├── fonts/
|    |    |
|    |    ├── img/
|    |
|    │── build/
|    |
|    │── index.html
|    |
|    │── manifest.json
|    |
|    └── service-worker.js
|
├── .editorconfig                       * 代碼風(fēng)格
├── .gitignore                          * git忽略文件
├── LICENSE                             * License 文件
├── README.md                           * Readme
├── config.xml                          * Cordova 配置文件
├── ionic.config.json                   * Ionic 配置文件
├── package.json                        * Javascript 工程文件
├── tsconfig.json                       * typescript 編譯配置文件
├── tslint.json                         * TypeScript 書(shū)寫(xiě)規(guī)范規(guī)則文件

所有的ionic工程結(jié)構(gòu)都大致如此,隨著項(xiàng)目的復(fù)雜,pages和providers會(huì)有更多的東西.

index.html

與普通的angular區(qū)別不大,body中使用ion-app作為程序的入口

<ion-app></ion-app>

app目錄

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

在@NgModule中可以看出,和普通的Angular不同,程序的主component并不是我們自己寫(xiě)的組件,而是IonicApp,它的template就是<ion-app>,然后通過(guò)給IonicModule傳遞MyApp的方式,把我們自己寫(xiě)的組件啟動(dòng)起來(lái).

  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>導(dǎo)航組件作為T(mén)ab項(xiàng)目的主compent,提供了移動(dòng)端的標(biāo)準(zhǔn)棧式導(dǎo)航.
Navigation-doc

ion-nav-element.png

從生成的頁(yè)面中能發(fā)現(xiàn),實(shí)際上ionic會(huì)把<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頁(yè)面為T(mén)abs頁(yè)面.構(gòu)造器傳入platform,statusBar,splashScreen.這是一個(gè)很標(biāo)準(zhǔn)實(shí)現(xiàn),當(dāng)平臺(tái)準(zhǔn)備就緒之后,給狀態(tài)欄設(shè)置默認(rèn)樣式,隱藏啟動(dòng)界面.

P.S. splash的圖片怎么設(shè)置?
在cordova的配置文件config.xml中,對(duì)不同的平臺(tái)有不同的<splash>

tabs目錄

代碼很少,核心就是<ion-tabs>以及<ion-tab>,結(jié)合官方文檔
Tabs-doc,每個(gè)tab配置有tabTitle標(biāo)題,tabIcon圖標(biāo),[root]每個(gè)分頁(yè)的根頁(yè)面.這里分別指向了HomePage,AboutPage,ContactPage三個(gè)頁(yè)面.

tabs-page.png

about,contact,home目錄

  1. html文件
    每個(gè)頁(yè)面都很標(biāo)準(zhǔn),以相對(duì)復(fù)雜的contact為例
<!-- 頭部 -->
<ion-header>        
  <!-- title要嵌入到navbar中 -->
  <ion-navbar>
    <ion-title>
      Contact
    </ion-title>
  </ion-navbar>
</ion-header>

<!-- 內(nèi)容部份 -->
<ion-content>
  <!-- 通過(guò)list 的 list-header 和 item 配合,實(shí)現(xiàn)列表顯示 -->
  <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,這個(gè)是由<ion-nav>組件創(chuàng)建并初始化的,作為一個(gè)Provider傳入page后,用它能讓頁(yè)面實(shí)現(xiàn)跳轉(zhuǎn),由于tab項(xiàng)目中的幾個(gè)都是單頁(yè)面,所以實(shí)際并沒(méi)有用到.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容