來扯點(diǎn)ionic3[4] 結(jié)構(gòu)型指令和列表渲染

往期傳送門
來扯點(diǎn)ionic3[0] 吹完牛再入門也不遲
來扯點(diǎn)ionic3[1] 創(chuàng)建一個(gè)新頁面
來扯點(diǎn)ionic3[2] 頁面一線牽 珍惜這段緣
來扯點(diǎn)ionic3[3] 頁面的生命周期事件望抽,也就是凡間所說的鉤子

《雷神3》上映已經(jīng)一周,但因?yàn)楦鞣N原因還沒來得去送票房杂腰,有多年不見的班納和洛基娘娘饲握,期待他們?cè)凇吨T神黃昏》和明年《無限戰(zhàn)爭(zhēng)》中的表現(xiàn)瓜浸。

之前在學(xué)習(xí)建立頁面的時(shí)候已經(jīng)體驗(yàn)過了模板插值(把變量展示在頁面中),這一節(jié)便來挖掘更多的模板語法。

準(zhǔn)備工作

方便起見攘残,我們這次處理項(xiàng)目中的默認(rèn)頁面 ContactPage,在 contact.ts 中建立一個(gè)簡(jiǎn)單的數(shù)組成員为狸。


contact.ts

在 contact.html 中清空 ion-content 標(biāo)簽的多余內(nèi)容肯腕。


contact.html

至此,準(zhǔn)備就緒钥平,開始了解第一個(gè)指令实撒。

重復(fù)性指令 ngFor

ngFor指令的作用是姊途,將批量的數(shù)據(jù)(數(shù)組)結(jié)合HTML元素添加到頁面DOM中,它的語法參照了ES6中的 for...of 語句:

for (let i of [1,2,3,4,5,6]) { ... }

基本的使用

ngFor指令基本語法:

*ngFor="let value of [1,2,3,4,5,6]"

使用時(shí)注意不要遺漏星號(hào)(*)知态。

嘗試在 contact.html 中輸出 data 數(shù)組:

<ion-content>
  <div *ngFor="let item of data">{{item}}</div>
</ion-content>

模板中渲染的數(shù)據(jù)和頁面類中的屬性成員是緊密綁定的捷兰,當(dāng)屬性發(fā)生變化,頁面也會(huì)當(dāng)即作出相應(yīng):

ionViewDidEnter(){
    setInterval(()=>{
        this.data.push(this.data.length + 1);
    },500)
  }

在上面的代碼中负敏,使用鉤子添加了一個(gè)間隔定時(shí)器贡茅,每半秒鐘向 data 數(shù)組中添加一個(gè)元素(在ionic3中,如果沒有特殊的必要其做,請(qǐng)使用箭頭函數(shù)代替?zhèn)鹘y(tǒng)的
function 聲明
)顶考。

動(dòng)圖:動(dòng)態(tài)渲染效果

可見,在頁面中妖泄,每半秒鐘也會(huì)相應(yīng)增加一個(gè)新的條目驹沿。

對(duì)象的渲染

在實(shí)際的開發(fā)中,我們更常會(huì)去處理一個(gè)對(duì)象數(shù)組蹈胡,這時(shí)候我們通過點(diǎn)運(yùn)算符(.) 輸出數(shù)組的屬性:

    data:any = [
        {name:'托尼·史塔克', birthYear:1970, gender:1, description:'鋼鐵俠'},
        {name:'史蒂夫·羅杰斯', birthYear:1920, gender:1, description:'美國(guó)隊(duì)長(zhǎng)'},
        {name:'娜塔莎羅·曼諾夫', birthYear:1928, gender:0, description:'黑寡婦'},
        {name:'索爾', birthYear:-5555,gender:1, description:'雷神'},
        {name:'克林頓·巴頓', birthYear:1974, gender:1, description:'鷹眼'},
        {name:'布魯斯·班納', birthYear:1975, gender:1, description:'綠巨人浩克'}
    ]; 

模板渲染:

<ion-content>
  <div *ngFor="let item of data">{{item.name}}</div>
</ion-content>
渲染效果

ionic的列表渲染

基本使用

在APP的開發(fā)中渊季,對(duì)列表?xiàng)l目的渲染并非是通過 div 來承載的,ionic 提供了列表專用的標(biāo)簽 ion-list

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

其中 ion-list 是列表容器罚渐, ion-item 是列表中的一個(gè)條目却汉,當(dāng)把 ion-item 和 ngFor 指令結(jié)合使用,就可以渲染出一個(gè)多條目的列表:

<ion-content>
  <ion-list>
    <ion-item *ngFor="let item of data">{{item.name}}</ion-item>
  </ion-list>
</ion-content>

更復(fù)雜一些的列表

ion-item 里可以通過不同元素的組織讓列表承載更多信息


<ion-item *ngFor="let item of data">
  <h2>{{item.name}}</h2>
  <p>{{item.description}}</p>
</ion-item>
image.png

此外荷并,ionic還提供一個(gè)指令 item-end 將指定的元素渲染在條目的尾部:

<ion-item *ngFor="let item of data">
      <h2>{{item.name}}</h2>
      <p>{{item.description}}</p>
      <p item-end>{{item.gender?'男':'女'}}, {{2017 - item.birthYear}} 歲</p>
    </ion-item>

注:漫威電影宇宙中超級(jí)英雄的出生年份不可考 :)

此處除了點(diǎn)運(yùn)算符(.) 輸出對(duì)象的屬性合砂,還使用了一個(gè)計(jì)算表達(dá)式和一個(gè)條件表達(dá)式,這些都是我們常見的用法源织。

加入頭像

利用 ion-avatar 標(biāo)簽和 item-start 指令渲染一個(gè)有頭像的列表:


ion-avatar標(biāo)簽的默認(rèn)樣式會(huì)自動(dòng)對(duì)圖片進(jìn)行縮放和截取既穆,呈現(xiàn)出如圖所示的圓形效果,此外也有一種可以展示方形圖片的 ion-thumbnail 標(biāo)簽(縮略圖標(biāo)簽)雀鹃,你也可以通過CSS來修改頭像的樣式幻工。
注:我事先已經(jīng)準(zhǔn)備好了圖片素材并將每位hero的avatar屬性寫進(jìn)了data中。

有條件地渲染:ngIf 指令

除了 ngFor 黎茎,還有一個(gè)非常常用的指令 ngIf 囊颅,通過一個(gè)表達(dá)式來判斷元素是否會(huì)被添加到模板中。這一指令同樣也是動(dòng)態(tài)的:當(dāng)表達(dá)式的值變?yōu)檎娓嫡埃乇銜?huì)添加踢代;當(dāng)表達(dá)式的值變?yōu)榧伲貢?huì)從模版中被移除嗅骄。

*ngIf="isActive"

嘗試用 ngIf 指令來曬先男性英雄

<ion-list>
    <ng-container *ngFor="let item of data">
      <ion-item *ngIf="item.gender===1">
        <ion-avatar  item-start>
          <img src="{{item.avatar}}">
        </ion-avatar>
        <h2>{{item.name}}</h2>
        <p>{{item.description}}</p>
        <p item-end>{{item.gender?'男':'女'}}, {{2017 - item.birthYear}} 歲</p>
      </ion-item>
    </ng-container>
  </ion-list>

這兒要說明的是胳挎,在angular中,*ngFor 和 *ngIf 不能放置在同一個(gè)標(biāo)簽上(Vue之類的框架則可以)溺森,因此在 ion-item 外加上一個(gè)“虛擬”的標(biāo)簽 ng-container, 它自身不會(huì)被渲染到DOM中慕爬,只會(huì)渲染它包裹的內(nèi)容(類似Vue中的 template 標(biāo)簽)窑眯。因此在沒有 ngIf 的情況下,把 ngFor 指令加在 ion-item 上和加在外層的 ng-container 標(biāo)簽上效果是等同的医窿;而在有 ngIf 指令的情況下磅甩,可以通過 ng-container標(biāo)簽避免兩個(gè)指令的沖突

參考文檔

  1. Angular結(jié)構(gòu)型指令
  2. Ionic List API Docs
  3. Ionic Item API Docs

下一章:來扯點(diǎn)ionic3[5] 輕松上手表單:這些組件可以玩一年

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末姥卢,一起剝皮案震驚了整個(gè)濱河市卷要,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌独榴,老刑警劉巖僧叉,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異棺榔,居然都是意外死亡瓶堕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門掷豺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人薄声,你說我怎么就攤上這事当船。” “怎么了默辨?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵德频,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我缩幸,道長(zhǎng)壹置,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任表谊,我火速辦了婚禮钞护,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘爆办。我一直安慰自己难咕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布距辆。 她就那樣靜靜地躺著余佃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪跨算。 梳的紋絲不亂的頭發(fā)上爆土,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音诸蚕,去河邊找鬼步势。 笑死氧猬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的立润。 我是一名探鬼主播狂窑,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼桑腮!你這毒婦竟也來了泉哈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤破讨,失蹤者是張志新(化名)和其女友劉穎丛晦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體提陶,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烫沙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了隙笆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锌蓄。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖撑柔,靈堂內(nèi)的尸體忽然破棺而出瘸爽,到底是詐尸還是另有隱情,我是刑警寧澤铅忿,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布剪决,位于F島的核電站,受9級(jí)特大地震影響檀训,放射性物質(zhì)發(fā)生泄漏柑潦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一峻凫、第九天 我趴在偏房一處隱蔽的房頂上張望渗鬼。 院中可真熱鬧,春花似錦荧琼、人聲如沸乍钻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽银择。三九已至,卻和暖如春累舷,著一層夾襖步出監(jiān)牢的瞬間浩考,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工被盈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留析孽,地道東北人搭伤。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像袜瞬,于是被迫代替她去往敵國(guó)和親怜俐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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