当前位置: 首页 > article >正文

项目实战:Vue3开发一个购物车

 

        这段HTML代码实现了一个简单的购物车实战小项目的前端页面,结合了Vue.js框架来实现数据响应式和交互逻辑。页面展示了购物车中的商品项,每个商品项有增减数量的按钮,并且能显示商品总数以及目前固定为0元的商品总价和总价计算。 【运用响应式数据内容】

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>实战小项目:购物车</title>

    <style>
      body {
          font-family: Arial, sans-serif;
      }
      .cart-item {
          width: 50%;
          margin-bottom: 15px;
          padding: 10px;
          border: 2px solid gray;
          border-radius: 10px;
          background-color: #ddd;
      }
      .buttons {
          margin-top: 5px;
      }
      .buttons button {
          padding: 5px 10px;
          margin-right: 5px;
          font-size: 16px;
          cursor: pointer;
          border: none;
          border-radius: 3px;
          background-color: pink;
      }
      .buttons input {
          width: 25px;
      }
      .buttons button:hover {
          background-color: yellow;
      }
      .quantity {
          font-size: 18px;
          font-weight: bold;
          margin-left: 10px;
      }
      h1, h2 {
          color: #333;
      }
  </style>
</head>
<body>
    <div id="app">
      <h1>实战小项目:购物车</h1>

    <!-- 提示:可以使用v-for指令,假设有n个品类,则生成n个商品项-->
    <div class="cart-item" v-for="(item, index) in cartItems">
        <div class="buttons">
            <span>{{item.name}} &nbsp;&nbsp;</span>
            <button v-on:click = "decreaseQuantity(index)">-</button>
            <span class="quantity">{{ cartItems[index].quantity }}&nbsp;&nbsp;</span>
            <button v-on:click = "increaseQuantity(index)">+</button>
            <p>
            请输入价格:
            <input type="text" v-model="cartItems[index].unit_price"/> 元/斤 <br> 
            单价:
            {{cartItems[index].unit_price}} 元/斤
            </p>
        </div>
    </div>


    <!-- 提示:可以用计算属性或数据变动侦听器,跟踪商品数和单价的变化,进而求出总数和总价-->
    <h3>商品总数:  <ins> {{totalItems}} </ins> 件</h3>
    <h3>商品总价:  <ins> {{sum}}</ins> 元</h3>


    </div>

    <script type="module">

      import { createApp, reactive, computed } from './vue.esm-browser.js'

        createApp({
            setup() {

                // 1.定义属性:存储商品的(响应式)数组 
                const cartItems = reactive([
                    { name: '苹果', quantity: 0, unit_price: "" },
                    { name: '香蕉', quantity: 0, unit_price: "" },
                    { name: '菠萝', quantity: 0, unit_price: "" },
                    // 可以自适应添加更多商品 
                    // { name: '芒果', quantity: 0, unit_price: "" },
                    // { name: '鸭梨', quantity: 0, unit_price: "" },
                ]);

                // 2.定义方法:增加商品数
                // increaseQuantity方法:以一个商品在cartItems数组中的索引为参数
                const increaseQuantity = (index) => {
                    // 点击"+"时,商品数量+1
                    cartItems[index].quantity += 1;  
        
                }

                // 3.定义方法:减少商品数
                const decreaseQuantity = (index) => {
                    // 商品数量没有负值,因此多加一道判断
                    // 商品数量小于0时,不会-1
                    if(cartItems[index].quantity > 0){
                        // 点击"-"时,商品数量-1
                        cartItems[index].quantity -= 1;
                    }
                }

                // 4.定义方法:计算商品总数
                // totalItems计算属性
                const totalItems = computed(() => 
                    {
                    let total_items = 0;
                    // 遍历cartItems数组,计算每个商品的数量
                    for(const item of cartItems){
                        // 累加在一起
                        total_items += item.quantity;
                    }
                    return total_items
                }
                )
             
                // 5.定义方法:计算商品总价
                const sum = computed(() =>
                {
                    let total_sum=0;
                    for(const item of cartItems){
                        // 商品总价=商品数量*商品单价
                        total_sum+=item.quantity*item.unit_price;
                    }
                    return total_sum
                }
            )

                // 6.暴露属性和方法
                return {
                    cartItems, 
                    increaseQuantity,decreaseQuantity,
                    totalItems,sum
                };
            },
        }).mount('#app');
    </script>
</body>
</html>


http://www.kler.cn/a/408503.html

相关文章:

  • MyBatis框架
  • 跟《经济学人》学英文:2024年11月23日这期 Why British MPs should vote for assisted dying
  • 案例研究|阿特斯的JumpServer分布式部署和多组织管理实践
  • leetcode刷题记录(四十二)——101. 对称二叉树
  • 网络协议之邮件协议(SMTP、POP3与IMAP)
  • MySQL 中的锁
  • ComfyUI绘画|SD WebUI 与 SD ComfyUI 的区别
  • 【含文档】基于.NET的医院医保管理系统(含源码+数据库+lw)
  • 2024最新python使用yt-dlp
  • 2024大数据职业技能竞赛(国赛)模块E-工业 用折线图展示设备OP160每日的运行时长
  • 疑难Tips:NextCloud域名访问登录时卡住,显示违反内容安全策略
  • MQ重复消费与消息顺序
  • 深入理解与实践:Softmax函数在机器学习中的应用
  • LeetCode-632. Smallest Range Covering Elements from K Lists [C++][Java]
  • vue--制作购物车
  • 【2024最新】基于Springboot+Vue的智慧食堂系统Lw+PPT
  • Spring Boot应用开发深度解析与实践案例
  • 基于lora的llama2二次预训练
  • 深入解析自校正控制(STC)算法及python实现
  • Python自动化测试实践中pytest用到的功能dependency和parametrize
  • Ansible--自动化运维工具
  • package.json中^1.x.x、~1.x.x、1.x.x有什么区别
  • 性能优化--CPU微架构
  • 单元测试入门
  • CTFHUB--yeeclass-web
  • msf的渗透流程