![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9UFRPhXVU1keNpXTmZEWjZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jM5MDM0UTM1EDMzMDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
在Ionic2中src檔案夾是我們主要的工作區域,我們看下這個檔案夾的結構:
- app
- assets
- pages
- theme
一共四個檔案夾。其中主要的兩個檔案夾就是
app
和
pages
app是ionic 應用的根目錄,pages則是子組建。
我們先看app下面的五個檔案。
app.scss
用于設定全局css樣式,一般我們都不用,是以沒啥好說的。
app.module.ts 我們稱為根子產品,除非你已經牛逼到可以寫超大型應用,一般情況隻有唯一一個根子產品,所有的子產品都會注入到這個子產品裡。我們先分析這裡面都有些什麼鬼?
上面就是全部架構;
我們首先在Angular2的核心庫中引入
NgModule
和
ErrorHandler
子產品用于,Angular2的正常工作和錯誤處理機制。
然後在Ionic2的核心庫中引入
IonicApp
,
IonicModule
,
IonicErrorHandler
三個子產品,用于IonicApp,子產品,錯誤處理機制。
引入根元件
引入子元件
注意上圖,這是在ionic-native也就是ionic2中的原生庫(自帶)中引入status-bar和splash-screen服務,這個知識點會在其他文章中細說。
在上面我們已經說了,這個檔案是一個根子產品,在上面我們也已經引入了
angular2
的
NgModule
機制.什麼意思?也就是所有引入的根子產品/子子產品/服務都得注入進來。否則,一切都都白忙活,這就如同一個插線闆。
declarations
和
entryComponents
數組内部一模一樣,把你的根元件和子元件(Component)都注入進來。
imports
告訴
IonicModule
這個Ionic根子產品你這個應用的根元件是哪個?這個案例的根元件就是
MyApp
.
bootstrap
是告訴你的Angular2哪個是你Ionic的根元件。這個案例中就IonicApp. 是以這個邏輯就是
MyApp < IonicModule < IonicApp < Angular2.
providers
用于服務注入,把我們剛才引入進來的那幾個服務包引入進來就好了。
好了,到了這裡我們一個完整的根子產品就已經完成了,我們隻需把這個AppModule根子產品通過class暴露出去就好了。那麼問題來了,這是暴露給誰的?答案就是main.ts這個檔案。
這個檔案隻有三行代碼,它引入了angular2中的
platformBrowserDynamic
這個子產品,告訴angular2
AppModule
是所有一切的核心。
到了這裡我們應該能弄清我們自己的應用同Ionic以及Angular2之間的關系了,我就回到我們這個應用本身。
無論是angular2還是Ionic2應用的根元件的名稱都是
app.component.ts
。下面就是這個檔案内部的代碼:
還是一行行的分析:
我們分别從angular2核心庫引入
components
子產品,ionic核心庫中引入
Platform
平台服務,以及從ionic原生庫中引入
狀态條
和
開場白服務
,我在這裡說下,這兩個服務都是IOS和android原生的功能,Ionic的服務是一種模仿原生應用。
引入子元件
TabsPage
,其實就是導覽列元件,沒啥好說的。其他文章會細說。
我們在
@Component
中聲明模闆是
app.html
,下面就是
app.html
這裡,很多人估計就懵了,什麼鬼?為什麼一個根元件的模闆裡隻有一個
<ion-nav>
标簽?
[root]
又是什麼鬼?這其實都是ionic中的自帶api,在這裡暫時記住這就是一個導覽列的外殼,裡面包着
rootPage
這個值就好了。
在這裡我們就可以将整個app的根元件打包出去了,
rootPage
這個值的類型可以是
any
,它就是我們上面引入的
TabsPage
這個子元件。這樣我們在TabsPage這個子元件中建立的導航功能就可以渲染到了根元件中,也就是無論什麼時候在這個應用中這個導航永遠存在。
constructor
函數是我們要講的一個重點,它類似于angular1中
controller
的回調函數,也就是說當MyApp這個根元件在被外部調用後,它所注入的服務項都會挨個運作。
platform.ready()
表示ionic全部加載完畢,平台已經就位。在then()函數的回調函數中,狀态條進入預設樣式狀态,而那個打開應用畫面就會隐藏。
好了,到這裡,有關于ionic2的src檔案夾中的檔案就全部講解完畢。
至于pages目錄裡的檔案和app檔案夾中的根元件基本一樣,可以自行了解。