当前位置: 首页 > Web前端 > HTML5

说说ionic3[4]的结构说明和列表渲染

时间:2023-04-05 17:08:14 HTML5

《雷神3》上映一周了,但由于种种原因一直没能送上票房。我已经很多年没见过Banner和Rocky了。期待明年能在《诸神黄昏》看到他们,在《无限战争》看到他们的表现。之前在学习制作页面的时候就已经体验过模板插值(在页面中显示变量)。本节将探讨更多模板语法。为了准备方便,我们这次对项目中的默认页面ContactPage进行处理,在contact.ts中创建一个简单的数组成员。清空contact.html中ion-content标签的多余内容。此时,您已准备好开始理解第一个命令。重复指令ngForngFor的作用是将与HTML元素结合的批量数据(数组)添加到页面DOM中。其语法参考了ES6中的for...of语句:for(letiof[1,2,3,4,5,6]){...}使用ngFor指令的基本语法:*ngFor="let[1,2,3,4,5,6]的值”,使用(*)时注意不要遗漏星号。尝试输出contact.html中的data数组:template中的属性成员是紧密绑定的。当属性改变时,页面会立即响应:ionViewDidEnter(){setInterval(()=>{this.data.push(this.data.length+1);},500)}上面代码中,一个间隔定时器使用钩子添加,每半秒向数据数组添加一个元素(*在ionic3中,如果没有特殊需要,请使用箭头函数代替传统的函数声明*)。可以看到,在页面中,每隔半秒就会对应的增加一个新条目。对象渲染在实际开发中,我们经常会和一个对象数组打交道。这时候我们使用点运算符(.)来输出数组的属性:data:any=[{name:'TonyStark',birthYear:1970,gender:1,description:'钢铁侠'},{name:'SteveRogers',birthYear:1920,gender:1,description:'美国队长'},{name:'NatashaLuoManov',birthYear:1928,gender:0,description:'黑寡妇'},{name:'Saul',birthYear:-5555,gender:1,description:'Thor'},{name:'ClintonBarton',birthYear:1974,gender:1,description:'鹰眼'},{name:'BruceBanner',birthYear:1975,gender:1,description:'绿巨人'}];模板渲染:{{item.name}}

Ionic列表渲染基本用在APP开发中,用于渲染列表项不由div携带。ionic提供了列表特定的标签ion-list其中ion-list是一个列表容器,ion-item是列表中的一个item,当与ion-item和ngFor指令结合使用时,可以呈现多项目列表:{{item.name}}对于更复杂的列表,ion-item可以组织不同的元素,让列表携带更多的信息

{{item.name}}

{{item.description}}

另外,ionic还提供了一个命令item-end来在item末尾渲染指定的元素:

{{item.name}}

{{item.description}}

{{item.gender?'男':'女'}},{{2017-item.birthYear}}岁

(注:漫威电影宇宙中超级英雄的出生年份无法考证:))除了点运算符(.)输出对象的属性,也可以使用计算表达式和条件表达式。这些是我们常见的用法。添加头像使用ion-avatar标签和item-start命令渲染带有头像的列表:ion-avatar标签图片默认样式会自动缩放截取图片,呈现圆形效果如图.此外,还有一个ion-thumbnail标签(thumbnailtag)可以显示方形图片。也可以通过CSS样式修改头像。(注:我已经提前准备好图片素材,将每个英雄的头像属性写入数据。)条件渲染:ngIf指令除了ngFor,还有一个很常见的指令ngIf,通过表达式来判断是否元素将被添加到模板中。该指令也是动态的:当表达式的计算结果为真时,添加元素;当表达式的计算结果为false时,该元素将从模板中删除。*ngIf="isActive"尝试使用ngIf指令显示男性英雄

{{item.name}}

{{item.description}}

{{item.gender?'Male':'Female'}},{{2017-item.birthYear}}岁

这里要说明的是在angular中,__ngFor和ngIf不能放在同一个tag__上(Vue等框架可以),所以在ion-item外加一个"virtual"标签ng-container,它本身不会渲染到DOM中,只会渲染它包裹的内容(类似于Vue中的模板标签)。因此,在没有ngIf的情况下,将ngFor指令添加到ion-item与将其添加到外部ng-container标签具有相同的效果;两个指令之间的冲突__。参考文档AngularStructuralDirectiveIonicListAPIDocsIonicItemAPIDocs