ionic2快速上手

完成Ionic安裝后,你可以創(chuàng)建第一個(gè)App了差导。本章內(nèi)容將指導(dǎo)你新建一個(gè)App被啼,添加一個(gè)頁(yè)面帜消,并且實(shí)現(xiàn)頁(yè)面間的導(dǎo)航。

build/main.js是自動(dòng)生成的浓体,實(shí)際上是把TypeScript轉(zhuǎn)成了普通的JavaScript泡挺。

cordova.js在本地開發(fā)的時(shí)候在瀏覽器中瀏覽會(huì)報(bào)404錯(cuò)誤,這個(gè)文件會(huì)在Cordova打包的時(shí)候自動(dòng)加到項(xiàng)目里命浴。

./src/

在src目錄里我們會(huì)找到原始的沒有經(jīng)過編譯的代碼娄猫,這也是我們的主要工作目錄。當(dāng)我們運(yùn)行ionic serve命令的時(shí)候生闲,在src/目錄下的文件會(huì)被轉(zhuǎn)譯成正確的瀏覽器能夠解釋的JavaScript版本(當(dāng)前是ES5)媳溺。這意味著我們可以使用高級(jí)的TypeScript,但是會(huì)編譯回瀏覽器需要的老版本的JavaScript碍讯。src/app/app.module.ts是App的入口悬蔽。

在文件底部我們會(huì)看到以下的代碼:

@NgModule({ declarations: [MyApp,HelloIonicPage, ItemDetailsPage, ListPage], imports: [IonicModule.forRoot(MyApp)], bootstrap: [IonicApp], entryComponents: [MyApp,HelloIonicPage,ItemDetailsPage,ListPage], providers: []})exportclassAppModule{}

每個(gè)App都有一個(gè)root module來(lái)控制應(yīng)用中其他的部分。如果你用過Ionic1和Angular1的話冲茸,有點(diǎn)類似ng-app屯阀。這也是我們使用ionicBootstrap來(lái)啟動(dòng)應(yīng)用的地方。

./src/app/app.html

src/app/app.html是主要的模板文件:

Pages{{p.title}}

在這個(gè)模板中轴术,我們使用了ion-menu來(lái)作為菜單难衰,使用ion-nav組件當(dāng)做主要的內(nèi)容區(qū)域。ion-menu的[content]屬性被綁定到ion-nav的本地變量content上逗栽,所以它能夠知道要顯示什么盖袭。

下面我們來(lái)看如何來(lái)創(chuàng)建新頁(yè)面并實(shí)現(xiàn)基本的導(dǎo)航。

4.添加頁(yè)面

現(xiàn)在我們對(duì)Ionic 2 App的布局有了一個(gè)基本的認(rèn)識(shí)彼宠,繼續(xù)來(lái)實(shí)現(xiàn)添加和導(dǎo)航頁(yè)面的功能鳄虱。

看一下src/app/app.html,在底部會(huì)看到以下代碼:

注意root屬性的綁定。對(duì)于ion-nav組件來(lái)說(shuō)凭峡,這是第一個(gè)或者說(shuō)是“根”頁(yè)面拙已。當(dāng)ion-nav組件載入時(shí),組件引用的rootPage變量將會(huì)作為根頁(yè)面被載入摧冀。

在src/app/app.component.ts,MyApp組件在構(gòu)造函數(shù)里指定了這個(gè)變量:

...import {HelloIonicPage}from'../pages/hello-ionic/hello-ionic';...exportclassMyApp{ ...// make HelloIonicPage the root (or first) pagerootPage: any = HelloIonicPage; pages:Array<{title: string, component: any}>;constructor( ? private platform: Platform, ? private menu: MenuController ) { ... } ...}

我們看到rootPage被設(shè)置為HelloIonicPage倍踪,所以HelloIonicPage將是nav controller第一個(gè)載入的頁(yè)面系宫。

創(chuàng)建一個(gè)頁(yè)面

接下來(lái),我們看一下我們導(dǎo)入的HelloIonicPage頁(yè)面建车。在src/pages/hello-ionic/目錄下扩借,打開hello-ionic.ts。

你可以注意到每個(gè)頁(yè)面都有自己的目錄缤至,每個(gè)目錄中都可以看到具有相同名字的.html和.scss文件潮罪。例如在hello-ionic/目錄我們可以看到有hello-ionic.ts,hello-ionic.html, 和hello-ionic.scss。雖然這種模式不是必須的领斥,但這有助于項(xiàng)目文件的良好組織嫉到。

接下來(lái)我們看到HelloIonicPage這個(gè)類。這個(gè)類創(chuàng)建了一個(gè)Page戒突,即Angular中的Component(組件)屯碴,并且會(huì)載入Ionic的導(dǎo)航系統(tǒng)。注意因?yàn)镻age是被動(dòng)態(tài)載入的膊存,所以他們不需要selector:

import{Component}from'@angular/core';@Component({ templateUrl:'build/pages/hello-ionic/hello-ionic.html'})exportclassHelloIonicPage{}

所有的Page都是一個(gè)類导而,并且關(guān)聯(lián)到對(duì)應(yīng)的模板文件上「羝椋看一下src/pages/hello-ionic/hello-ionic.html今艺,即這個(gè)頁(yè)面的模板文件:

Hello Ionic

Welcome to your first Ionic app!

This starter project is our way of helping you get a functional app running in record time.

Follow along on the tutorial section of the Ionic docs!

Toggle Menu

是navigation bar的模板。當(dāng)我們導(dǎo)航到頁(yè)面時(shí)爵卒,navigation bar的按鈕和頁(yè)面標(biāo)題將會(huì)作為整個(gè)頁(yè)面動(dòng)畫的一部分展現(xiàn)出來(lái)虚缎。

模板其余的部分是標(biāo)準(zhǔn)的Ionic代碼,設(shè)置了內(nèi)容區(qū)域和輸出我們的歡迎信息钓株。

創(chuàng)建一個(gè)新頁(yè)面

創(chuàng)建這個(gè)新頁(yè)面实牡,我們并不需要做很多配置,只需要確保設(shè)置好navigation bar要展示的標(biāo)題就可以了轴合。

看一下src/pages/list/list.ts的內(nèi)容创坞,這里定義了一個(gè)新頁(yè)面:

import{ Component }from'@angular/core';import{ NavController, NavParams }from'ionic-angular';import{ ItemDetailsPage }from'../item-details/item-details';@Component({ ? ? ? ?templateUrl:'list.html'})exportclassListPage{ ? ?selectedItem: any; ? ?icons: string[]; ? ?items:Array<{title: string, note: string, icon: string}>;constructor(public navCtrl: NavController, public navParams: NavParams) {// If we navigated to this page, we will have an item available as a nav paramthis.selectedItem = navParams.get('item');this.icons = ['flask','wifi','beer','football','basketball','paper-plane','american-football','boat','bluetooth','build'];this.items = [];for(leti =1; i <11; i++) {this.items.push({ ? ? ? ? ? ?title:'Item '+ i, ? ? ? ? ? ?note:'This is item #'+ i, ? ? ? ? ? ?icon:this.icons[Math.floor(Math.random() *this.icons.length)] ? ? ? ?}); ? ?} } ? ?itemTapped(event, item) {this.navCtrl.push(ItemDetailsPage, { ? ? ? ? ? ?item: item ? ? ? ?}); ? ?}}

這個(gè)頁(yè)面將會(huì)創(chuàng)建一個(gè)基本的列表頁(yè)面,包含一些數(shù)字受葛。

大致上這個(gè)頁(yè)面跟我們之前看的HelloIonicPage非常類似题涨。接下來(lái)我們看一下如何導(dǎo)航到這個(gè)新頁(yè)面。

5.導(dǎo)航到頁(yè)面

回憶一下上個(gè)章節(jié)总滩,我們?cè)贚istPage類里有一些下面的代碼:

itemTapped(event, item) {this.navCtrl.push(ItemDetailsPage, {? ? ? ? ?item: item? ? ?}); }

你也許注意到我們引用了ItemDetailPage纲堵。我們用以下的代碼將其import到app/pages/list/list.ts里:

import {ItemDetailsPage} from '../item-details/item-details';

當(dāng)保存文件后,ionic serve進(jìn)程會(huì)自動(dòng)重新編譯以應(yīng)用新的更改闰渔,并自動(dòng)刷新瀏覽器席函。重新看一下瀏覽器中的頁(yè)面,當(dāng)點(diǎn)擊一個(gè)項(xiàng)時(shí)冈涧,它將會(huì)導(dǎo)航到詳情頁(yè)面向挖。注意菜單按鈕被一個(gè)返回按鈕代替了蝌以,這是Ionic遵循的一種原生App的導(dǎo)航方式,當(dāng)然這是可以被配置的何之。

工作原理

Ionic 2的導(dǎo)航像一個(gè)簡(jiǎn)單的棧,我們使用push方法來(lái)導(dǎo)航到新頁(yè)面咽筋,將其放在棧的頂部溶推,并顯示一個(gè)返回按鈕。對(duì)于返回奸攻,我們使用pop方法將其從棧中移除蒜危。因?yàn)槲覀冊(cè)跇?gòu)造函數(shù)中設(shè)置了this.navCtrl屬性,我們可以調(diào)用this.navCtrl.push()方法睹耐,來(lái)導(dǎo)航到一個(gè)新的頁(yè)面辐赞。我們還可以將一個(gè)object傳遞給將要導(dǎo)航過去的頁(yè)面。使用push方法導(dǎo)航到新頁(yè)面非常簡(jiǎn)單硝训,但I(xiàn)onic的導(dǎo)航系統(tǒng)是非常靈活的响委。可以從導(dǎo)航文檔處獲得更詳細(xì)的導(dǎo)航示例窖梁。

對(duì)于Url赘风,Ionic 2與Ionic 1是不同的。我們要確保我們可以返回到某個(gè)Page纵刘,所以一般不使用Url來(lái)進(jìn)行導(dǎo)航邀窃。當(dāng)然我們?cè)诒匾臅r(shí)候還是有辦法來(lái)使用Url導(dǎo)航的。

接下來(lái)

你已經(jīng)掌握了Ionic 2的入門知識(shí)假哎。你可以繼續(xù)學(xué)習(xí)Ionic 2的各種Component瞬捕,和關(guān)于硬件的Native APIs。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舵抹,一起剝皮案震驚了整個(gè)濱河市肪虎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掏父,老刑警劉巖笋轨,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異赊淑,居然都是意外死亡爵政,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門陶缺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)钾挟,“玉大人,你說(shuō)我怎么就攤上這事饱岸〔舫觯” “怎么了徽千?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)汤锨。 經(jīng)常有香客問我双抽,道長(zhǎng),這世上最難降的妖魔是什么闲礼? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任牍汹,我火速辦了婚禮,結(jié)果婚禮上柬泽,老公的妹妹穿的比我還像新娘慎菲。我一直安慰自己,他們只是感情好锨并,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布露该。 她就那樣靜靜地躺著,像睡著了一般第煮。 火紅的嫁衣襯著肌膚如雪解幼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天空盼,我揣著相機(jī)與錄音书幕,去河邊找鬼。 笑死揽趾,一個(gè)胖子當(dāng)著我的面吹牛台汇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播篱瞎,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼苟呐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了俐筋?” 一聲冷哼從身側(cè)響起牵素,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎澄者,沒想到半個(gè)月后笆呆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粱挡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年赠幕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片询筏。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡榕堰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嫌套,到底是詐尸還是另有隱情逆屡,我是刑警寧澤圾旨,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站魏蔗,受9級(jí)特大地震影響砍的,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜莺治,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一挨约、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧产雹,春花似錦、人聲如沸翁锡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)馆衔。三九已至瘟判,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間角溃,已是汗流浹背拷获。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留减细,地道東北人匆瓜。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像未蝌,于是被迫代替她去往敵國(guó)和親驮吱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容