商城首页主要包含以下几个部分
1.使用ion-slide实现首页幻灯片;
2.使用ion-grid实现商品分类;
3.使用ion-list实现商品列表;
说一下实现思路
1.先获取网络请求的数据,查看数据结构;
2.根据数据结构来判断需要展示的数据,编写html;
3.调整界面样式,编写scss;
准备工作
开始之前请到阿里开源图标库准备首页需要的小图标,不想自己找的同学,在文章最后的交流群的群文件里有导出好的资源小图标,下载后直接放到项目的src/assets/icon/目录中即可。
并在index.html的header节点中导入资源图标库;
index.html
<link href="assets/icon/iconfont.css" rel="stylesheet">
详细代码如下:
home.ts
import { AppService, AppGlobal } from './../../app/app.service';import { Component } from '@angular/core';import { NavController, IonicPage } from 'ionic-angular';@IonicPage()@Component({
selector: 'page-home',
templateUrl: 'home.html'})export class HomePage {
slides: Array<any> = [];
categories: Array<any> = [];
products: Array<any> = [];
spinner1: boolean = true;
params = {
favoritesId: 2054400,
pageNo: 1,
pageSize: 20
} constructor(public appService: AppService, public navCtrl: NavController) { this.getSlides(); this.getCategories(); this.getProducts();
} //获取幻灯片
getSlides() { var params = {
favoritesId: 2056439,
pageNo: 1,
pageSize: 5
} this.appService.httpGet(AppGlobal.API.getProducts, params, rs => { console.debug(rs); this.slides = rs.data; this.spinner1 = false;
})
} //获取分类
getCategories() { this.appService.httpGet(AppGlobal.API.getCategories, { appTag: 'dress' }, rs => { console.debug(rs); this.categories = rs.data;
})
} //获取首页推荐列表
getProducts() { this.appService.httpGet(AppGlobal.API.getProducts, this.params, rs => { console.debug(rs); this.products = rs.data;
})
} //商品详情
goDetails(item) { console.debug('go details...')
}
}home.html
<ion-header>
<ion-navbar color="primary">
<ion-title>首页</ion-title>
</ion-navbar></ion-header><ion-content>
<ion-row *ngIf="spinner1">
<ion-col text-center>
<ion-spinner></ion-spinner>
</ion-col>
</ion-row>
<ion-slides>
<ion-slide *ngFor="let item of slides" (click)="goDetails(item)">
< img src="{{item.PictUrl}}" alt="">
<div class="cover"></div>
<span class="title">{{item.Title}}</span>
</ion-slide>
</ion-slides>
<div class="categories">
<ion-grid>
<ion-row wrap>
<ion-col text-center tappable col-3 *ngFor="let c of categories" (click)="goProductList(c)">
<i class="iconfont {{c.Icon}} icon"></i>
<span class="title">{{c.FavoritesTitle}}</span>
</ion-col>
</ion-row>
</ion-grid>
</div>
<ion-item-divider class="t-header" color="light"> 年会礼服2017年新款 </ion-item-divider>
<div class="product">
<ion-row wrap>
<ion-col tappable col-6 *ngFor="let p of products" (click)="goDetails(p)">
<img src="{{p.PictUrl}}" alt=""/>
<p>{{p.Title}}</p>
<div class="list-price buy">
<span class="price-new"><i>¥</i>{{p.ZkFinalPrice}}</span>
<i class="del">¥<span>{{p.ReservePrice}}</span></i>
</div>
</ion-col>
</ion-row>
</div></ion-content>html.scss
page-home {
ion-slides { height: 30%; .cover { position: absolute; bottom: 0px; width: 100%; height: 20px; background: linear-gradient(to right, #673743, #f9537d); opacity: 0.6;
} .title { position: absolute; bottom: 0px; width: 90%; height: 20px; line-height: 20px; font-size: 60%; left: 5px; text-align: center; color: white;
}
} .categories { .title { font-family: "黑体-简"; font-weight: 300; color: #808080; font-size: 80%; display: block; margin-top: 5px;
}
ion-row { background-color: #efefef; padding: 0px;
}
ion-col { background-color: white; /*border: 1px solid #efefef;*/
}
} .icon { border-radius: 100px; color: white; background-color: #f8285c; font-size: 36px !important; padding: 5px;
} .c1 { background-color: orangered;
} .c2 { background-color: blueviolet;
} .c3 { background-color: sandybrown;
} .c4 { background-color: slateblue;
} .c5 { background-color: orange;
} .c6 { background-color: dimgray;
} .t-header { font-family: "黑体-简"; font-weight: 300; color: #f8285c; border-left: 2px solid #f8285c; border-top: 5px solid #efefef; background: white;
} .stores { .title { font-family: "黑体-简"; font-weight: 300; color: #808080; font-size: 80%; display: block; margin-top: 5px;
}
ion-row { background-color: #efefef; padding: 0px;
}
ion-col { background-color: white; border: 1px solid #efefef;
}
} .product {
ion-row { background-color: #efefef; font-family: "Helvetica Neue", Helvetica, STHeiTi, sans-serif; padding-top: 3px;
ion-col { position: relative; background-color: white; border: 2px solid #efefef; border-radius: 2px; padding: 0px; p { margin: 0px; padding: 0px; width: 100%; font-size: 12px; font-family: "黑体-简"; font-weight: 300; color: #808080; height: 26px; line-height: 26px; background: rgba(255, 255, 255, 0.8); overflow: hidden; text-indent: 5px;
}
}
} .list-price { width: 98%; height: 26px; line-height: 18px; position: relative; bottom: 0; margin: 0 2%;
} .price-new { font-size: 18px; color: #f8285c;
} .list-price i { font-style: normal; font-size: 12px;
} .del { color: rgba(171, 171, 171, 1); text-decoration: line-through; margin-left: 2px;
} .good-btn { display: block; position: absolute; height: 16px; line-height: 12px; color: #f8285c; font-size: 13px; font-family: "黑体-简"; text-align: right; top: 5px; right: 2px;
} .quan_img { position: absolute; width: 61px; height: 55px; z-index: 5; right: 0; top: 0; cursor: pointer; background: url(/assets/img/quan.png) no-repeat; background-size: contain; color: #fff;
} .quan_img .num_money { font-family: Arial; font-size: 18px; height: 40px; left: 9px; position: absolute; text-align: center; top: 14px; width: 40px;
}
}
}效果图
4-1.png
下一讲将讲解�在ionic3中如何设计透明导航栏。
完!
作者:IonicBlog
链接:https://www.jianshu.com/p/2746ece3aa0d