[Ionic 2從入門到精通] 3.3 基本布局

課程開始我們學(xué)習(xí)會(huì)很慢且很簡(jiǎn)單颓芭,只是專注創(chuàng)建應(yīng)用的基本布局横侦。我們需要給Home頁(yè)面創(chuàng)建模板挥萌,用來(lái)顯示所有創(chuàng)建的檢查列表绰姻,對(duì)于Checklist頁(yè)面,用于展示一個(gè)指定檢查列表的所有條目引瀑。如果你稍加留意的話狂芋,你就知道還有另一個(gè)頁(yè)面,這個(gè)的制作就是比較靠后的事情了憨栽。
如之前所說(shuō)帜矾,我會(huì)盡量使課程模組化,這樣制作應(yīng)用可以引起你的興趣屑柔,而不用強(qiáng)制遵循一個(gè)固定的順序屡萤。由于這是第一個(gè)應(yīng)用,也因?yàn)檫@是基本包里面唯一包含的原因掸宛,我會(huì)注意確保所有細(xì)節(jié)解釋清楚死陆。

Home頁(yè)面

在進(jìn)入代碼編寫之前,我們需要在腦中有一個(gè)清晰的視圖我們要制作什么樣子的一個(gè)東西(譯者:胸有成竹)唧瘾。一下是完成的home頁(yè)面的截圖:

主頁(yè)

可以看到它有一個(gè)很漂亮的樣式措译,這個(gè)我們后續(xù)會(huì)涉及,但是實(shí)際上他就是個(gè)很簡(jiǎn)單的列表劈愚,右上角有一個(gè)按鈕用來(lái)添加一個(gè)新的檢查列表瞳遍。雖然不是全部都簡(jiǎn)單,你會(huì)發(fā)現(xiàn)其中一個(gè)列表項(xiàng)有點(diǎn)不一樣菌羽,他有一個(gè)‘Edit’和‘Delete’按鈕掠械。這是因?yàn)槲覀儗⑹褂肐onic提供的滑動(dòng)列表組件,他允許我們指定在用戶滑動(dòng)列表項(xiàng)的時(shí)候展示一些內(nèi)容注祖。
那么猾蒂,我們開始制作吧。首先是晨,我們看一下整個(gè)模板里面的內(nèi)容肚菠,然后我們將他分成小塊來(lái)詳細(xì)討論:
> 修改src/pages/home/home.html為如下內(nèi)容

<ion-header>
    <ion-navbar color="secondary">
        <ion-title>
            <img src = "assets/images/logo.png" />
        </ion-title>
        <ion-buttons end>
            <button ion-button icon-only (click)="addChecklist()"><ion-icon name="add-circle"></ion-icon></button>
        </ion-buttons>
    </ion-navbar>
</ion-header>

<ion-content>
    <ion-list no-lines>
        <ion-item-sliding>
        <button ion-item (click)="viewChecklist(checklist)">
        TITLE GOES HERE
        <span>0 items</span>
        </button>
            <ion-item-options>
            <button ion-button icon-only color="light" (click)="renameChecklist(checklist)"><ion-icon        name="clipboard"></ion-icon> Edit</button>
            <button ion-button icon-only color="danger"  (click)="removeChecklist(checklist)"><ion-icon
            name="trash"></ion-icon> Delete</button>
            </ion-item-options>
        </ion-item-sliding>
    </ion-list>
</ion-content>

我們先開始討論<ion-header>部分:

<ion-header>
    <ion-navbar color="secondary">
        <ion-title>
        <img src = "assets/images/logo.png" />
            </ion-title>
        <ion-buttons end>
            <button ion-button icon-only (click)="addChecklist()"><ion-icon   name="add-circle"></ion-icon></button>
        </ion-buttons>
    </ion-navbar>
</ion-header>

<ion-navbar>允許我們添加一個(gè)頁(yè)首條到我們的應(yīng)用,可以持有一些按鈕罩缴,標(biāo)題甚至在需要的時(shí)候直接與Ionic的導(dǎo)航系統(tǒng)整合來(lái)顯示后退按鈕蚊逢。
我們給navbar添加了color屬性并制定為secondary顏色,此顏色定義在theme/variable.scss里面箫章。navbar里面我們用到一個(gè)<ion-title>烙荷,他基本上就是用來(lái)展示一個(gè)當(dāng)前頁(yè)面的文本標(biāo)題,展示logo檬寂。我們也用到了<ion-buttons>在navbar里面創(chuàng)建了一個(gè)按鈕终抽。通過(guò)指定end屬性,所有按鈕在iOS上都會(huì)排列在右邊,但是如果我們指定的是‘start’屬性昼伴,按鈕將會(huì)排列到左邊匾旭。記住,Ionic 2有平臺(tái)一致性編譯圃郊,所以在不同的運(yùn)行平臺(tái)上价涝,他默認(rèn)會(huì)展示到合適的位置上。
最后持舆,我們將按鈕放到<ion-buttons>里面飒泻。這個(gè)按鈕用到了一個(gè)圓形圖標(biāo)并添加了一個(gè)點(diǎn)擊處理器在點(diǎn)擊的時(shí)候調(diào)用home.ts里面的addChecklist()方法(現(xiàn)在還沒(méi)創(chuàng)建這個(gè)方法)。同時(shí)注意吏廉,我們給按鈕用了ion-buttonicon-only屬性,這可以是Ionic知道我們將對(duì)按鈕使用Ionic樣式惰许,這個(gè)樣式將使按鈕只有圖標(biāo)沒(méi)有文本席覆。
我們現(xiàn)在來(lái)看列表部分:

<ion-content>
    <ion-list no-lines>
        <ion-item-sliding>
            <button ion-item (click)="viewChecklist(checklist)">
            TITLE GOES HERE
            <span>0 items</span>
            </button>
            <ion-item-options>
            <button ion-button icon-only color="light"   (click)="renameChecklist(checklist)"><ion-icon
            name="clipboard"></ion-icon> Edit</button>
            <button ion-button icon-only color="danger"  (click)="removeChecklist(checklist)"><ion-icon   name="trash"></ion-icon> Delete</button>
            </ion-item-options>
        </ion-item-sliding>
    </ion-list>
</ion-content>

在講解列表之前,我們先看到所有的東西都被包圍在<ion-content>里面 -- 這個(gè)標(biāo)簽用來(lái)持有頁(yè)面的主體內(nèi)容汹买,在大部分的案例中佩伤,所有navbar之外的內(nèi)容都將放在這里。
和純HTML創(chuàng)建的列表相比:

<ul>
    <li></li>
    <li></li>
    <li></li>
</ul>

Ionic創(chuàng)建列表的方式基本上是一樣的:

<ion-list>
    <ion-item></ion-item>
    <ion-item></ion-item>
    <ion-item></ion-item>
</ion-list>

當(dāng)然晦毙,我們的看起來(lái)稍微復(fù)雜些生巡,所以我們來(lái)了解一下。第一個(gè)超出尋常的事物是我們家了一個(gè) no-lines屬性到<ion-list>见妒。和我們給navbar添加的secondary屬性一樣孤荣,這個(gè)屬性讓我們的列表里面的項(xiàng)不能顯示邊界。
接下來(lái)的有點(diǎn)棘手须揣,也就是我們?cè)O(shè)置滑動(dòng)項(xiàng)的地方盐股,和<ion-item>不同的是,我們用的是<ion-sliding-item>耻卡,由兩個(gè)部分的內(nèi)容組成 -- 列表項(xiàng)本身疯汁,和<ion-item-options>,這是是用戶滑動(dòng)列表項(xiàng)顯示的卵酪。
<ion-sliding-item>第一塊是普通的<ion-item>定義幌蚊,但是不是直接使用的<ion-item>我們使用的是<button ion-item>實(shí)際上是一個(gè)用來(lái)列表項(xiàng)樣式的按鈕。視覺(jué)上溃卡,這兩個(gè)方法基本上是一樣的溢豆,但是實(shí)際上在移動(dòng)應(yīng)用里任何非<button><a>元素的點(diǎn)擊處理器都會(huì)有一點(diǎn)點(diǎn)延遲。我們不喜歡延遲塑煎,所以我們用了按鈕沫换。
我們給按鈕附加的點(diǎn)擊處理器調(diào)用了一個(gè)viewChecklist函數(shù)同時(shí)也傳入了一個(gè)參數(shù)名為checklist。我們目前還沒(méi)有這個(gè)函數(shù)定義,但是實(shí)際上我們會(huì)根據(jù)一個(gè)數(shù)據(jù)數(shù)組創(chuàng)建大量的此類列表項(xiàng)讯赏。所以最終此處傳入的checklist將是點(diǎn)擊的想的引用(詳情后續(xù)講解)垮兑。
最后,我們的第二個(gè)代碼塊<ion-item-block>漱挎,簡(jiǎn)單的定義了在用戶滑動(dòng)列表項(xiàng)的時(shí)候的顯示內(nèi)容系枪。在本案例中我們只是加入了一個(gè)‘Edit’和‘Delte’按鈕,他們也會(huì)在調(diào)用函數(shù)的時(shí)候注入checklist引用(再次提醒磕谅,我們稍后創(chuàng)建這個(gè)原因私爷,目前他會(huì)引發(fā)問(wèn)題)。
這就是home頁(yè)面的所有內(nèi)容膊夹,我們現(xiàn)在去checklist頁(yè)面衬浑。

Checklist頁(yè)面

跟之前流程一樣,在學(xué)習(xí)之前我們先看看效果圖:

列表詳情頁(yè)

看起來(lái)跟之前那個(gè)差不多放刨,最起碼大部分看起來(lái)是這樣的工秩,但是還是有一些不同點(diǎn)姚垃。顯然执庐,我們有另外的一個(gè)按鈕玖瘸,一個(gè)返回按鈕用于返回主頁(yè)周拐。列表項(xiàng)旁邊有一個(gè)checkbox用于標(biāo)記一個(gè)項(xiàng)是否完成吃嘿,我們這里也設(shè)置了滑動(dòng)項(xiàng)切端。
再次磅轻,我們將添加模板代碼然后來(lái)講解:
> 修改 src/pages/checklist/checklist.html為以下:

<ion-header>
    <ion-navbar color="secondary">
    <ion-title>
        CHECKLIST TITLE
    </ion-title>
    <ion-buttons end>
    <button ion-button icon-only (click)="uncheckItems()"><ion-icon name="refresh-circle"></ion-icon></button>
    <button ion-button icon-only (click)="addItem()"><ion-icon  name="add-circle"></ion-icon></button>
    </ion-buttons>
    </ion-navbar>
</ion-header>
<ion-content>
<ion-list no-lines>
    <ion-item-sliding>
    <ion-item>
        <ion-label>ITEM TITLE</ion-label>
        <ion-checkbox [checked]="item.checked" (click)="toggleItem(item)">
        </ion-checkbox>
    </ion-item>
    <ion-item-options>
        <button ion-button icon-only color="light" (click)="renameItem(item)"><ion-icon name="clipboard"></ion-icon> Edit</button>
        <button ion-button icon-only color="danger"  (click)="removeItem(item)"><ion-icon name="trash"></ion-icon>
        Delete</button>
    </ion-item-options>
    </ion-item-sliding>
</ion-list>
</ion-content>

你已經(jīng)知道了navbar的如何工作的拐格,本次我們只是在<ion-buttons>里面新加入了一個(gè)按鈕掉分,他也使用了end屬性俭缓,這樣所有的項(xiàng)都會(huì)排列到右邊。本次我們將使用<ion-title>的傳統(tǒng)方式叉抡,顯示當(dāng)前展示的檢查列表(最起碼尔崔,我們馬上就會(huì)做這個(gè))的標(biāo)題。按鈕也都有不同的點(diǎn)擊處理函數(shù)褥民,但是由于我們當(dāng)前是在ChecklistPage組件季春,這些函數(shù)都會(huì)在checklist.ts文件里面觸發(fā)(這個(gè)東西我們當(dāng)前也沒(méi)有創(chuàng)建)。
現(xiàn)在你也知道滑動(dòng)項(xiàng)怎么工作的消返,但是這次我們有一個(gè)<ion-checkbox>作為主體內(nèi)容载弄,當(dāng)他被點(diǎn)擊的時(shí)候他會(huì)觸發(fā)toggleItem()函數(shù),這個(gè)函數(shù)稍后也會(huì)定義撵颊。注意宇攻,我們用來(lái)普通的<ion-item>來(lái)替代<button ion-item>,這是因?yàn)槲覀兪侵苯咏ocheckbox附加點(diǎn)擊處理器而不用附加到整個(gè)項(xiàng)倡勇。
這里也有一點(diǎn)新語(yǔ)法逞刷,我們靠近點(diǎn)看:

[checked]="item.checked"

如果某些東西被 [方括號(hào)] 包圍的話,因?yàn)檫@我們將在這個(gè)元素上修改一個(gè)屬性property,我們將設(shè)置引號(hào)里面包含的表達(dá)式expression夸浅,而不是字符串仑最。所以,在本案例中帆喇,我們將設(shè)置checked屬性到item.checked的值警医。目前我們還沒(méi)有創(chuàng)建一個(gè)item的引用所以現(xiàn)在是沒(méi)有任何作用的,但是后續(xù)會(huì)坯钦。這里需要重點(diǎn)記住的是方括號(hào)會(huì)評(píng)估引號(hào)里面的任何內(nèi)容预皇。我們想象一下你的組件的類里有如下定義:

this.myName = "Josh"

如果我如下使用:

<something myName="myName">

myName屬性attribute將被設(shè)為“myName”文本值,但是如果我們使用如下代碼的話:

<something [myName]="myName">

myName屬性property將被設(shè)置為‘Josh’婉刀,因?yàn)閙yName在此示例中將會(huì)評(píng)估(譯者:表達(dá)式估值)吟温。繼續(xù),模板里沒(méi)有別的新玩意了 -- 我們簡(jiǎn)單的添加了‘Edit’和‘Delete’按鈕到滑動(dòng)列表突颊,就像上一個(gè)頁(yè)面一樣溯街。
如果現(xiàn)在運(yùn)行ionic serve,將會(huì)看到如下結(jié)果:

列表詳情頁(yè)

我想我們都會(huì)認(rèn)為這看起來(lái)好丑洋丐,但是結(jié)構(gòu)就在那里。請(qǐng)記住挥等,我們還沒(méi)有對(duì)logo指定樣式友绝,因此根據(jù)你使用何種尺寸的設(shè)備,他可能和上圖看起來(lái)不大一樣肝劲。
接下來(lái)的課程我們將給列表拉取真是數(shù)據(jù)并對(duì)他自定義樣式迁客,這樣他會(huì)看起來(lái)順眼些。Ionic 2的模板語(yǔ)法第一眼看起來(lái)可能會(huì)有點(diǎn)迷糊辞槐,但是一旦你熟悉了之后將會(huì)很好使用掷漱。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市榄檬,隨后出現(xiàn)的幾起案子卜范,更是在濱河造成了極大的恐慌,老刑警劉巖鹿榜,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件海雪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡舱殿,警方通過(guò)查閱死者的電腦和手機(jī)奥裸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)沪袭,“玉大人湾宙,你說(shuō)我怎么就攤上這事。” “怎么了侠鳄?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵埠啃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我畦攘,道長(zhǎng)霸妹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任知押,我火速辦了婚禮叹螟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘台盯。我一直安慰自己罢绽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布静盅。 她就那樣靜靜地躺著良价,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蒿叠。 梳的紋絲不亂的頭發(fā)上明垢,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音市咽,去河邊找鬼痊银。 笑死,一個(gè)胖子當(dāng)著我的面吹牛施绎,可吹牛的內(nèi)容都是我干的溯革。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谷醉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼致稀!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起俱尼,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤抖单,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后遇八,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臭猜,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年押蚤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蔑歌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡揽碘,死狀恐怖次屠,靈堂內(nèi)的尸體忽然破棺而出园匹,到底是詐尸還是另有隱情,我是刑警寧澤劫灶,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布裸违,位于F島的核電站,受9級(jí)特大地震影響本昏,放射性物質(zhì)發(fā)生泄漏供汛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一涌穆、第九天 我趴在偏房一處隱蔽的房頂上張望怔昨。 院中可真熱鬧,春花似錦宿稀、人聲如沸趁舀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)矮烹。三九已至,卻和暖如春罩锐,著一層夾襖步出監(jiān)牢的瞬間奉狈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工涩惑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘹吨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓境氢,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親碰纬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子萍聊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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