vue3前端开发-小兔鲜项目-热榜区域的代码实现!这里主要的思路是,借助于props定义的对象,来做一个计算属性的判定。
export const getHotGoodsAPI = ({ id, type, limit = 3 }) => {
return request({
url:'/goods/hot',
params:{
id,
type,
limit
}
})
}
第一步是准备好业务接口的调用。
第二步是修改一下,我们的组件内代码
如图,我们给这2个地方,分别绑定一个自定义的属性值,分别为1,2,(注意,这里的数字是远程服务器接口要求的,必须这样写。不能随便乱写)。
<script setup>
import { ref ,onMounted, computed} from 'vue'
import { getHotGoodsAPI } from '@/apis/detail'
import { useRoute } from 'vue-router'
const props = defineProps({
hotType:{
type:Number
}
})
const TYPEMAP ={
1:'24小时热榜',
2:'周热榜'
}
const title = computed(()=>TYPEMAP[props.hotType])
const goodList = ref([])
const route = useRoute()
const getHotList = async () => {
const res = await getHotGoodsAPI({
id: route.params.id,
type: props.hotType
})
goodList.value = res.result
}
onMounted(()=>getHotList())
</script>
<template>
<div class="goods-hot">
<h3> {{ title }} </h3>
<!-- 商品区块 -->
<RouterLink :to="`/detail/${item.id}`" class="goods-item" v-for="item in goodList" :key="item.id">
<img :src="item.picture" alt="" />
<p class="name ellipsis">{{ item.name }}</p>
<p class="desc ellipsis">{{ item.desc }}</p>
<p class="price">¥{{ item.price }}</p>
</RouterLink>
</div>
</template>
<style scoped lang="scss">
.goods-hot {
h3 {
height: 70px;
background: $helpColor;
color: #fff;
font-size: 18px;
line-height: 70px;
padding-left: 25px;
margin-bottom: 10px;
font-weight: normal;
}
.goods-item {
display: block;
padding: 20px 30px;
text-align: center;
background: #fff;
img {
width: 160px;
height: 160px;
}
p {
padding-top: 10px;
}
.name {
font-size: 16px;
}
.desc {
color: #999;
height: 29px;
}
.price {
color: $priceColor;
font-size: 20px;
}
}
}
</style>
这里面就是完整的代码了,我们使用到了一个计算属性。来判定到底是显示什么内容文字。
把props.hotType交给业务接口函数就行了。实现了内容的差异化请求渲染。