编程 Vue3创建一个基础的购物车功能,结合本地存储实现数据的持久性

2024-11-19 07:17:50 +0800 CST views 778

使用 Vue 3 制作购物车功能,结合本地存储

简介

在现代 Web 开发中,购物车是电商网站中至关重要的功能之一。Vue 3 作为一个流行的前端框架,提供了许多功能强大的特性,使得开发购物车变得简单而高效。在这篇文章中,我们将使用 Vue 3 的 setup 语法糖,结合本地存储,来创建一个基础的购物车功能。

项目结构

首先,让我们搭建项目的基础结构。我们将创建一个名为 ShoppingCart.vue 的组件,包含以下几个部分:

  1. 商品列表
  2. 购物车
  3. 本地存储的管理

初始化项目

如果你还没有 Vue 3 项目,可以通过 Vue CLI 或 Vite 初始化一个新的项目。这里我们将使用 Vite 来创建一个新的 Vue 3 项目:

npm init vite@latest my-shopping-cart
cd my-shopping-cart
npm install

然后,在 src 目录下创建 components 文件夹,并在其中创建一个名为 ShoppingCart.vue 的文件。

ShoppingCart.vue 代码

下面是我们 ShoppingCart.vue 组件的基础代码。我们将实现商品的添加和删除功能,并且保证数据的持久性通过本地存储。

<template>
  <div>
    <h1>购物车</h1>
    <div>
      <h2>商品列表</h2>
      <ul>
        <li v-for="item in products" :key="item.id">
          <span>{{ item.name }} - {{ item.price }} 元</span>
          <button @click="addToCart(item)">添加到购物车</button>
        </li>
      </ul>
    </div>
    
    <div>
      <h2>我的购物车</h2>
      <ul>
        <li v-for="item in cart" :key="item.id">
          <span>{{ item.name }} - {{ item.price }} 元</span>
          <button @click="removeFromCart(item.id)">移除</button>
        </li>
      </ul>
      <p v-if="cart.length === 0">购物车是空的</p>
      <p v-if="cart.length > 0">总价: {{ totalPrice }} 元</p>
    </div>
  </div>
</template>

<script>
import { ref, watch, computed } from 'vue';

export default {
  name: 'ShoppingCart',
  setup() {
    // 商品列表
    const products = ref([
      { id: 1, name: '商品 A', price: 100 },
      { id: 2, name: '商品 B', price: 200 },
      { id: 3, name: '商品 C', price: 300 },
    ]);

    // 购物车数组
    const cart = ref([]);

    // 从本地存储加载购物车
    const loadCart = () => {
      const storedCart = JSON.parse(localStorage.getItem('shoppingCart'));
      if (storedCart) {
        cart.value = storedCart;
      }
    };

    // 添加商品到购物车
    const addToCart = (item) => {
      const existingItem = cart.value.find(cartItem => cartItem.id === item.id);
      if (existingItem) {
        existingItem.quantity++;
      } else {
        cart.value.push({ ...item, quantity: 1 });
      }
      saveCart();
    };

    // 从购物车中移除商品
    const removeFromCart = (id) => {
      cart.value = cart.value.filter(item => item.id !== id);
      saveCart();
    };

    // 计算总价
    const totalPrice = computed(() => {
      return cart.value.reduce((total, item) => total + item.price * item.quantity, 0);
    });

    // 将购物车数据保存到本地存储
    const saveCart = () => {
      localStorage.setItem('shoppingCart', JSON.stringify(cart.value));
    };

    // 监听购物车的变化并保存到本地存储
    watch(cart, saveCart);

    // 组件第一个渲染时加载购物车数据
    loadCart();

    return {
      products,
      cart,
      addToCart,
      removeFromCart,
      totalPrice,
    };
  },
};
</script>

<style scoped>
button {
  margin-left: 10px;
}
</style>

代码解析

1. 商品列表

我们在 setup 函数中定义了一个 products 数组,包含了多个商品的信息。使用 v-for 指令,我们在模板中循环输出每个商品,并提供一个“添加到购物车”的按钮。

2. 购物车功能

购物车用 cart 数组来存储已添加的商品。我们定义了 addToCartremoveFromCart 函数,分别用于添加商品到购物车和从购物车中移除商品。

当我们添加一个商品时,我们首先检查购物车中是否已存在该商品。如果存在,则只增加其数量;如果不存在,则将其作为新项添加到购物车中。

3. 本地存储

为了实现购物车数据的持久化,我们使用 localStorage。在组件加载时,我们调用 loadCart 函数来从本地存储中加载购物车数据。每当购物车发生变化时,我们都会调用 saveCart 函数,将当前的购物车保存到本地存储中。

4. 计算总价

我们使用了 computed 方法来计算购物车中商品的总价。通过对每个商品的价格和数量进行相乘并求和,我们可以实时更新总价。

总结

上述代码展示了如何使用 Vue 3 和本地存储制作一个基础的购物车功能。我们利用了 Vue 的响应式特性,使得界面能够实时更新。通过本地存储,我们能够保证用户的购物车数据不会在页面刷新或关闭后丢失。这为开发功能全面的电商应用打下了基础。

复制全文 生成海报 Web开发 前端 电商 Vue 编程

推荐文章

使用 Nginx 获取客户端真实 IP
2024-11-18 14:51:58 +0800 CST
js常用通用函数
2024-11-17 05:57:52 +0800 CST
html一些比较人使用的技巧和代码
2024-11-17 05:05:01 +0800 CST
微信内弹出提示外部浏览器打开
2024-11-18 19:26:44 +0800 CST
XSS攻击是什么?
2024-11-19 02:10:07 +0800 CST
Vue中的样式绑定是如何实现的?
2024-11-18 10:52:14 +0800 CST
Vue3结合Driver.js实现新手指引功能
2024-11-19 08:46:50 +0800 CST
php常用的正则表达式
2024-11-19 03:48:35 +0800 CST
全栈工程师的技术栈
2024-11-19 10:13:20 +0800 CST
Go语言中实现RSA加密与解密
2024-11-18 01:49:30 +0800 CST
# 解决 MySQL 经常断开重连的问题
2024-11-19 04:50:20 +0800 CST
如何实现虚拟滚动
2024-11-18 20:50:47 +0800 CST
Python 基于 SSE 实现流式模式
2025-02-16 17:21:01 +0800 CST
Go 语言实现 API 限流的最佳实践
2024-11-19 01:51:21 +0800 CST
JavaScript 的模板字符串
2024-11-18 22:44:09 +0800 CST
一些实用的前端开发工具网站
2024-11-18 14:30:55 +0800 CST
阿里云免sdk发送短信代码
2025-01-01 12:22:14 +0800 CST
10个极其有用的前端库
2024-11-19 09:41:20 +0800 CST
Python设计模式之工厂模式详解
2024-11-19 09:36:23 +0800 CST
Linux 网站访问日志分析脚本
2024-11-18 19:58:45 +0800 CST
Git 常用命令详解
2024-11-18 16:57:24 +0800 CST
Go语言SQL操作实战
2024-11-18 19:30:51 +0800 CST
关于 `nohup` 和 `&` 的使用说明
2024-11-19 08:49:44 +0800 CST
如何配置获取微信支付参数
2024-11-19 08:10:41 +0800 CST
百度开源压测工具 dperf
2024-11-18 16:50:58 +0800 CST
程序员茄子在线接单