如何只显示两个商品。
来源:1-5 项目作业
xcn_aaaa
2023-04-07 17:20:13
问题描述:
如果含有两个一下的商品且商品id大于2就会不显示
相关截图:



cartList.vue
<template>
<div class="wrapper">
<div class="title">我的全部购物车</div>
<div class="carts">
<div
class="cart"
v-for="(cart,key) in cartList"
:key = key
@click="() => handleCartClick(key)"
v-show="cart.total"
>
<div class="cart__title">{{cart.shopName}}</div>
<div class="cart__list">
<template
v-for="(product,innerIndex) in cart.productList"
:key="innerIndex">
<div
class="cart__item"
v-show="product.count && innerIndex < 3"
>
<img :src="product.imgUrl" class="cart__item__img">
<div class="cart__item__detail">
<h4 class="cart__item__title">{{product.name}}</h4>
<p class="cart__item__price">
<span class="cart__item__single">
<span class="cart__item__price__yen">¥</span>{{product.price}} x {{product.count}}
</span>
<span class="cart__item__total">
<span class="cart__item__price__yen">¥</span>{{(product.price*product.count).toFixed(2)}}
</span>
</p>
</div>
</div>
</template>
</div>
<div class="cart__total" v-if="Object.keys(cart.productList).length>=2">共计{{cart.total}}件</div>
</div>
</div>
<div
class="empty"
v-if="Object.keys(cartList).length === 0 || show ==0"
>
购物车为空
</div>
</div>
<Docker :currentIndex="1"/>
</template>
<script>
// import { computed } from 'vue'
// import { useStore } from 'vuex'
import Docker from '../../components/Docker.vue'
import { useRouter } from 'vue-router'
import { ref } from 'vue'
// 处理购物车的逻辑
const cartListEffect = () => {
const router = useRouter()
const cartList = JSON.parse(localStorage.cartList || '{}')
const show = ref(0)
for (const i in cartList) {
const cart = cartList[i]
let total = 0
for (const j in cart.productList) {
const product = cart.productList[j]
total += product.count
if (product.count <= 0) {
delete cart.productList[j]
}
}
cart.total = total
if (total !== 0) {
show.value = 0
}
}
const handleCartClick = (shopId) => {
router.push(`/orderConfirmation/${shopId}`)
}
return { cartList, handleCartClick, show }
}
export default {
components: { Docker },
name: 'CartList',
setup () {
const { cartList, handleCartClick, show } = cartListEffect()
console.log(cartList)
return { cartList, handleCartClick, show }
}
}
</script>
<style lang="scss" scoped>
@import '../../style/variables.scss';
@import '../../style/mixins.scss';
.wrapper {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0.5rem;
color: $content-fontcolor;
overflow-y:auto ;
background-color: $bg-color;
}
.title {
line-height: .22rem;
font-size: .16rem;
color: $content-fontcolor;
text-align: center;
background-color: $white-fontColor;
padding: .11rem 0;
}
.carts {
margin: 0 .18rem .2rem .18rem;
position: absolute;
top: .60rem;
left: 0;
right: 0;
.cart {
// overflow-y:scroll ;
margin-bottom: .16rem;
background-color: $white-fontColor;
padding-bottom: .16rem;
&__list {
overflow-y: scroll;
background-color: $white-fontColor;
}
&__title {
font-size: .14rem;
line-height: .22rem;
color: $content-fontcolor;
padding: .16rem;
background-color: $white-fontColor;
}
&__item {
position: relative;
display: flex;
padding-bottom: .16rem;
margin: 0 .16rem;
&__img {
width: .46rem;
height: .46rem;
margin-right: .16rem;
}
&__title {
line-height: .2rem;
font-size: .14rem;
color: $content-fontcolor;
margin: 0;
@include ellipsis;
}
&__detail {
overflow: hidden;
flex: 1;
}
&__price {
line-height: .2rem;
font-size: .14rem;
color: $hignlight-fontColor;
margin: .06rem 0 0 0;
display: flex;
&__yen {
font-size: .12rem;
}
}
&__total {
flex: 1;
text-align: right;
color: #000;
}
}
&__total {
line-height: .28rem;
text-align: center;
font-size: 14px;
color: $light-fontColor;
background-color: $search-bgColor;
margin: 0 .16rem ;
}
}
}
.empty {
text-align: center;
font-size: .16rem;
color: $light-fontColor;
margin-top: .3rem;
}
</style>我已经提交过作业啦,老师可以看我提交的作业的代码。
1回答
好帮手慕久久
2023-04-07
同学你好,这种需求,不能用对象中的key来实现,只能利用数组的索引。因此需要改造数据,将productList变成数组,比如:


同学试试。
祝学习愉快!
相似问题