引子
前文已经请求到分类了,下面可想而知就是要展示这些数据了。
1.封装获取类别下内容函数
在utils/api.js中添加如下代码有:
// 获取首页菜单类内容方法
getRecommendContent(categoryId){
return request.requestGet(baseUrl + "recommend/" + categoryId);
}
2.测试封装的函数获取效果
然后在pages/index.vue中修改代码如下:
<template>
<div class="container">
<div class="center-box">
<div class="recommend-category-box">
<ul class="clear-fix" >
<li :class="index!==0?'float-left':'float-left recommend-menu-active'" v-for="(item, index) in categories" :key="index">
{{item.favorites_title}}
</li>
</ul>
</div>
<div class="recommend-content-list-box">
<div class="recommend-content-title">
<span>热/门/推/荐</span>
</div>
<div class="recommend-content-list">
<div class="recommend-content-item" v-for="(item, index) in content" :key="index">
<span v-text="item.title"></span>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import api from "../utils/api";
export default {
// vue生命周期函数
async asyncData(){
console.log("test load data..");
let categoryResult = await api.getRecommendCategories();
// 数据返回状态码为10000表示获取数据成功
if (categoryResult.code === 10000){
// 获取分类商品列表
let contentResult = await api.getRecommendContent(categoryResult.data[0].favorites_id);
if (contentResult.code === 10000){
return {categories: categoryResult.data,
content: contentResult.data.tbk_dg_optimus_material_response.result_list.map_data};
}
}else{
// TODO:错误处理
}
}
}
</script>
<style>
.recommend-menu-active{
border-bottom: #c9302c 2px solid;
color: #c9302c!important;
}
.recommend-category-box li{
font-size: 16px;
margin-left: 20px;
margin-right: 20px;
color: #8c8c8c;
cursor: pointer;
}
.recommend-category-box{
height: 60px;
line-height: 58px;
margin-top: 30px;
background: white;
box-shadow: 0 5px 10px #d4d4d4;
margin-bottom: 20px;
}
.recommend-category-box ul{
list-style: none;
}
</style>
需要注意大锯视频中的api是失效了的,原文:阳光沙滩商城的API文档 评论中也有提及。
保存,运行,刷新浏览器得到如下结果:
3.完善内容显示
代码如下:
<template>
<div class="container">
<div class="center-box">
<div class="recommend-category-box">
<ul class="clear-fix" >
<li :class="index!==0?'float-left':'float-left recommend-menu-active'" v-for="(item, index) in categories" :key="index">
{{item.favorites_title}}
</li>
</ul>
</div>
<div class="recommend-content-list-box">
<div class="recommend-content-title">
<span>热/门/推/荐</span>
</div>
<div class="recommend-content-list clear-fix">
<div class="recommend-content-item float-left" v-for="(item, index) in content" :key="index">
<div class="recommend-item-cover">
<img :src="item.pict_url" alt="">
</div>
<div class="recommend-item-title" v-text="item.title"></div>
<div class="recommend-item-info">
<a class="buy_btn">领券购买</a>
<span class="recommend-original-price">原价:34.00</span>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import api from "../utils/api";
export default {
// vue生命周期函数
async asyncData(){
console.log("test load data..");
let categoryResult = await api.getRecommendCategories();
// 数据返回状态码为10000表示获取数据成功
if (categoryResult.code === 10000){
// 获取分类商品列表
let contentResult = await api.getRecommendContent(categoryResult.data[0].favorites_id);
if (contentResult.code === 10000){
return {categories: categoryResult.data,
content: contentResult.data.tbk_dg_optimus_material_response.result_list.map_data};
}
}else{
// TODO:错误处理
}
}
}
</script>
<style>
.buy_btn{
display: inline-block;
line-height: 1;
white-space: nowrap;
cursor: pointer;
background: #FFF;
border: 1px solid #DCDFE6;
color: #606266;
-webkit-appearance: none;
text-align: center;
box-sizing: border-box;
outline: 0;
margin: 0;
transition: .1s;
font-weight: 500;
padding: 12px 20px;
font-size: 14px;
border-radius: 4px;
color: #FFF;
background-color: #F56C6C;
border-color: #F56C6C;
}
.recommend-original-price{
margin-left: 10px;
color: #ebb563;
font-weight: 600;
}
.recommend-item-info{
margin-top: 10px;
}
.recommend-item-title{
margin-top: 10px;
margin-bottom: 10px;
/*控制显示行数,超出两行用省略号显示*/
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp:2;
overflow: hidden;
}
.recommend-content-item{
width: 265px;
height: 370px;
box-shadow: 0 5px 10px #d4d4d4;
padding: 10px 10px;
margin: 10px;
border-radius: 5px;
}
.recommend-item-cover img{
width: 243px;
height: 243px;
}
.recommend-menu-active{
border-bottom: #c9302c 2px solid;
color: #c9302c!important;
}
.recommend-category-box li{
font-size: 16px;
margin-left: 20px;
margin-right: 20px;
color: #8c8c8c;
cursor: pointer;
}
.recommend-category-box{
height: 60px;
line-height: 58px;
margin-top: 30px;
background: white;
box-shadow: 0 5px 10px #d4d4d4;
margin-bottom: 20px;
}
.recommend-category-box ul{
list-style: none;
}
</style>
效果如下图: