【小兔鲜电商前台 | 项目笔记】第八天

前言:小兔鲜电商前台项目是一个基于Vue的PC端项目,本系列文章我将总结我在这个项目中学到的知识点,写项目笔记。如果你正好在学Vue或想从零搭建一个前端项目,希望本系列文章可以帮助到你。

【小兔鲜电商前台 | 项目笔记】第八天

今日完结:

  • 本地加入购物车实现
  • 本地 - 头部购物车列表渲染
  • 本地 - 头部购物车删除实现
  • 本地 - 头部购物车统计计算
  • 本地 - 列表购物车数据渲染
  • 本地 - 列表购物车单选功能实现
  • 本地 - 列表购物车全选功能实现
  • 本地 - 列表购物车统计数据实现

今日收获:

1.本地添加 | 删除商品

添加商品:

javascript 复制代码
 const addCart = async (goods) => {
  
     // 添加购物车操作
    // 已添加过 - count + 1
    // 没有添加过 - 直接push
    // 思路:通过匹配传递过来的商品对象中的skuId能不能在cartList中找到,找到了就是添加过
    const item = cartList.value.find((item) => goods.skuId === item.skuId)
    if (item) {
      // 找到了
      item.count++
    } else {
      // 没找到
      cartList.value.push(goods)
    }
  
}

删除商品:

javascript 复制代码
const delCart = async (skuId) => {
        // 思路:
      // 1. 找到要删除项的下标值 - splice
      // 2. 使用数组的过滤方法 - filter
      const idx = cartList.value.findIndex((item) => skuId === item.skuId)
      cartList.value.splice(idx, 1)
   }

2.通过计算属性算出商品的总数 | 总价

javascript 复制代码
const allCount = computed(() => cartList.value.reduce((a,c) => a+c.count,0))
const allPrice = computed(() => cartList.value.reduce((a,c) => a+c.count*c.price,0))

3.购物车单选 | 全选功能

单选

javascript 复制代码
<script setup>

const singleCheck = (i,selected) => {
    
    cartStore.singleCheck(i.skuId,selected)
}

</script>
<el-checkbox :model-value="i.selected" @change="(selected)=>singleCheck(i,selected)"/>
javascript 复制代码
// 单选功能
  const singleCheck = (skuId, selected) => {
  // 通过skuId找到要修改的那一项 然后把它的selected修改为传过来的selected
  const item = cartList.value.find((item) => item.skuId === skuId)
  item.selected = selected
}

全选

javascript 复制代码
<script setup>

const allCheck = (selected) => {
     cartStore.allCheck(selected)
}
</script>

 <el-checkbox :model-value="cartStore.isAll" @change="allCheck"/>
javascript 复制代码
// 是否全选计算属性
const isAll = computed(() => cartList.value.every((item) => item.selected))

// 全选功能action
const allCheck = (selected) => {
  // 把cartList中的每一项的selected都设置为当前的全选框状态
  cartList.value.forEach(item => item.selected = selected)
}

4.额外传自定义参数

原生 @change 自带的参数默认只能拿到一个值:是否选中(true/false)

javascript 复制代码
// 默认写法,只能拿到选中状态,拿不到当前行数据 i
@change="singleCheck"

想要传递自定义参数,我们可以用箭头函数包裹

javascript 复制代码
 @change="(selected)=>singleCheck(i,selected)"

总结:

今天学到了日常项目很常见的增,删操作,以及总结商品的数量和总价。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

相关推荐
爱勇宝20 小时前
小红花成长新版:模板来了,鼓励也更容易开始
前端·后端·程序员
竹林81821 小时前
Solana前端开发:我在一个NFT铸造页面上被@solana/web3.js的Connection和Transaction签名坑了两天
前端
冬奇Lab21 小时前
每日一个开源项目(第144篇):ai-website-cloner-template - 一条命令、多 Agent 并行,把任意网站逆向成 Next.js 代码
前端·人工智能·开源
玄玄子21 小时前
webpack publicPath作用原理
前端·webpack·程序员
HduSy21 小时前
帮 Claude Code 做了个菜单栏 Token 看板,聊聊里面的一些实现逻辑
前端
用户0595401744621 小时前
用了6个月LangChain,才发现AI Agent的记忆存储一直有坑——写了23个Pytest用例才彻底修好
前端·css
奶油mm21 小时前
我偷偷把公司的祖传 jQuery 项目改成了 Vue3,CTO 没发现,但全组都来抄我的代码了
前端
用户21366100357221 小时前
Vue2非父子通信与动态组件
前端·vue.js
PedroQue991 天前
Vite插件体系1.0.0:API稳定,生产就绪
前端·vite
用户059540174461 天前
把LLM记忆测试从手工脚本换成Pytest参数化,回归时间从2小时降到10分钟
前端·css