瑞星 发表于 2024-12-2 11:39:35

Vue框架开辟一个简单的购物车(Vue.js)

让我们使用所学知识来开辟一个简单的购物车
(记得暴露属性和方法!!!)
起首来看一下最基本的一个html框架
<!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">
      <div class="buttons">
            <span>苹果 &nbsp;&nbsp;</span>
            <button>-</button>
            <span class="quantity">1&nbsp;&nbsp;</span>
            <button>+</button>
            <p>
            请输入价格:
            <input type="text"/> 元/斤 <br>
            单价:
            1 元/斤
            </p>
      </div>
    </div>

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

    </div>

    <script type="module">
      import { createApp, reactive, computed } from './vue.esm-browser.js'
      createApp({
            setup() {

                // 1.定义属性:存储商品的(响应式)数组

                // 2.定义方法:增加商品数

                // 3.定义方法:减少商品数

                // 4.定义方法:计算商品总数

                // 5.定义方法:计算商品总价

                // 6.暴露属性和方法
            }
      }).mount('#app');
    </script>
</body>
</html> 结果如下:
https://i-blog.csdnimg.cn/direct/da122641d3ad4bf6950531ceec824b4f.png
目前是一个静态的一个网页
起首界说属性:存储商品的(响应式)数组(使用v-for遍历)
<div class="cart-item" v-for="(item,index) in cartItems">


const cartItems = reactive([
                  { name: '苹果', quantity: 1, unit_price: 1 },
                  { name: '香蕉', quantity: 1, unit_price: 1 },
                  { name: '菠萝', quantity: 1, unit_price: 1 },
                  
                ]); https://i-blog.csdnimg.cn/direct/6561f056aa10490194bf74dd1aa9bf84.png
我们可以发现我们已经做出了三个链接,但是名字都是苹果,这个时候我们添加一个插值即可
<span>{{item.name}}&nbsp;&nbsp;</span> https://i-blog.csdnimg.cn/direct/6ebd73a775684986ab27b276424ce850.png
那么我们如何控制商品的增长和淘汰呢
我们只必要界说一个函数 而且使用v-on的方法绑定即可,事件触发为点击
留意:在做淘汰按钮时,我们要通过if判定限定一下商品数,否则会出现负数
<button v-on:click = "pre(index)">-</button>
<span class="quantity">{{cartItems.quantity}} &nbsp;&nbsp;</span>
<button v-on:click = "next(index)">+</button>



// 2.定义方法:增加商品数
                  const next = (index) =>{
                  cartItems.quantity ++;
                  
               
                  }                           
                // 3.定义方法:减少商品数
                const pre = (index) => {
                  if ( cartItems.quantity>1) {
                        cartItems.quantity --;
                  }
                  
                                             } https://i-blog.csdnimg.cn/direct/ffceee12aa5d4622a5eb1c65121197ee.png
接着我们要计算商品的总数,那么该如何计算呢
可以用计算属性或数据变更侦听器,跟踪商品数和单价的变化,进而求出总数和总价
   <h3>商品总数:<ins> {{totalItem()}} </ins> 件</h3>

// 4.定义方法:计算商品总数
                const totalItem = () =>{
                  let total_items = 0 ;
                  for(const item of cartItems){
                  total_items +=item.quantity;

                   }
                   return total_items
                }
https://i-blog.csdnimg.cn/direct/273de88485014629b0ad676be3d7ba55.png
计算完总数,我们就该来计算总价了,同理可得使用computer计算属性,界说一个变量,在函数内里写一个for遍历即可(输入框内里属于写一个双向绑定v-model从而实现单价变化总价随着变化)
      <input type="text" v-model="cartItems.unit_price"> 元/斤 <br>

<h3>商品总价:<ins> {{totalprice}} </ins> 元</h3>



   // 5.定义方法:计算商品总价
               const totalprice = computed(()=>
                  {
                  let total_price = 0;
                  for(const money of cartItems){
                        total_price += money.unit_price*money.quantity;
                  }
                  return total_price
                })
https://i-blog.csdnimg.cn/direct/240c05a8dbe44bc39abc952ba80452e4.png
如许我们一个简单的购物车便开辟成功啦
完备代码如下:

<!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 = "pre(index)">-</button>            <span class="quantity">{{cartItems.quantity}}   </span>            <button v-on:click = "next(index)">+</button>            <p>            请输入价格:            <input type="text" v-model="cartItems.unit_price"> 元/斤 <br>             单价:            1 元/斤            </p>      </div>    </div>    <!-- 提示:可以用计算属性或数据变更侦听器,跟踪商品数和单价的变化,进而求出总数和总价-->    <h3>商品总数:<ins> {{totalItem()}} </ins> 件</h3>    <h3>商品总价:<ins> {{totalprice}}</ins> 元</h3>    </div>    <script type="module">      import { createApp, reactive, computed } from './vue.esm-browser.js'      createApp({            setup() {                // 1.界说属性:存储商品的(响应式)数组               const cartItems = reactive([                  { name: '苹果', quantity: 1, unit_price: 1 },                  { name: '香蕉', quantity: 1, unit_price: 1 },                  { name: '菠萝', quantity: 1, unit_price: 1 },                                    ]);                // 2.界说方法:增长商品数                  const next = (index) =>{                  cartItems.quantity ++;                                                       }                                             // 3.界说方法:淘汰商品数                const pre = (index) => {                  if ( cartItems.quantity>1) {                        cartItems.quantity --;                  }                                                                   }                // 4.界说方法:计算商品总数                   const totalItem = () =>{                  let total_items = 0 ;                  for(const item of cartItems){                  total_items +=item.quantity;                  }                   return total_items                }                // 5.界说方法:计算商品总价                const totalprice = computed(()=>                  {                  let total_price = 0;                     for(const money of cartItems){                        total_price += money.unit_price*money.quantity;                      }                  return total_price                   })                         // 6.暴露属性和方法                return {                  cartItems,                  pre,                  next,                  totalItem,                  totalprice,                };            },      }).mount('#app');    </script></body></html> https://i-blog.csdnimg.cn/direct/dd06be8ca27546028f3e0d8e67e3e5d8.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Vue框架开辟一个简单的购物车(Vue.js)