Vue 原生基础购物车(学到就是赚到

简介:

一、html代码如下:

<div id="content" v-cloak>  
    <!-- 标题 --> 
    <table style="border-collapse: collapse">
      <thead>
        <tr>
          <th>名称</th>
          <th>价格</th>
          <th>数量</th>
          <th>操作</th>
        </tr>
      </thead>
      <!-- 内容 -->
      <tbody>
        <!-- 循环,唯一,高效更新,index,id。。 -->
        <tr v-for="(a,index) in shop":key="a.name" :style="{backgroundColor:(a.num>0?'pink':'#fff')}">
          <td>{{a.name}}</td>
          <td>{{a.price}}</td>
          <td>
          <button v-show="a.num>0" @click="jian(a,index)">-</button>
          <span>{{a.num}}</span>
          <button @click="add(a,index);">+</button>
          </td>
          <td>
          <button @click="edit(a,index)">编辑</button>
          <button @click="del(a,index)">删除</button>
          </td>
        </tr>
      </tbody>
      <tfoot>
        <td></td>
        <td>
          <span>总价</span>
          <span>{{totalPrice}}</span>
        </td>
        <td>
          <span>总数量</span>
          <span>{{total}}</span>
        </td>
        <td></td>
        </tr>
      </tfoot>
    </table>
    <!-- 添加商品 -->
    <div id="add">
      <button id="adds" @click="addShop">添加商品</button>
      <div v-show="addStatus">
        <button @click="sureAdd">保存</button>
        <button @click="closeAdd">取消</button>
        <input type="text" v-model="addName">
        <input type="number" v-model="addPrice">
      </div>
    </div>
    <!-- 编辑商品 -->
    <div id="edit" v-if="editStatus">
      <div>
        <button @click="suerEdit();">确定</button>
        <button @click="closeEdit()">取消</button>
        <input type="text" v-model="editName">
        <input type="number" v-model="editNum">
      </div>
    </div>
  </div>


二、CSS代码如下:

<style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    #content {
      width: 50%;
      margin-left: 50px;
    }
    table{
      width: 100%;
      border: 1px solid #000;
    }
    tr{
      height: 50px;
      text-align: center;
      border: 1px solid #ccc;
    }
    td button{
      padding-left:10px;
      padding-right: 10px;
    }
    #adds{
      width: 20%;
      height: 30px;
    }
    #add{
      width: 100%;
      margin-top: 15px;
    }
    #add div{
      margin-top: 5px;
    }
    #edit{
      width: 100%;
      margin-top: 15px;
    }
    #edit div{
      margin-top: 5px;
    }
  </style>


Vue代码如下:

<script>
    Vue.createApp({
      data(){
        return{
          shop:[ 
            {
              name:'yq',
              price:50,
              num:0,
            },
            {
              name:'wyb',
              price:20,
              num:0,
            },
          ],
          back:'pink',
          // 添加显示隐藏
          addStatus:false,
          // 编辑显示隐藏
          editStatus:false,
          // 操作显示隐藏
          isActive:false,
          // 编辑
          ediArr:"",
          // 添加商品名字
          addName:"",
          // 添加商品价格
          addPrice:"",
          // 编辑
          editName:"",
          editNum:"",
          // 总价
          totalPrice:0,
          // 总数
          total:0,
        };
      },
      methods:{
        add(a,id){
          console.log(a);
          this.shop[id].num++;
          this.total++;
          this.totalPrice += a.price*this.shop[id].num
        },
        jian(a,id){
          this.shop[id].num--;
                this.total--;
                this.totalPrice = this.totalPrice - this.shop[id].price;
        },
        // 添加变状态
        addShopK(){
          console.log(1);
          this.addStatus=true;
        },
        closeAdd(){
          this.addStatus=false;
        },
        edit(a,id){
          console.log(a);
          this.ediArr = id;
          this.editName = this.shop[id].name
          this.editNum = this.shop[id].price
          this.editStatus = true;
        },
        // 编辑确定
        suerEdit(){
          this.editStatus = false;
          console.log(this.editName,this.editNum);
          console.log(this.ediArr);
          this.shop[this.ediArr].name = this.editName;
          this.shop[this.ediArr].price = this.editNum;
          this.editName = '';
          this.editNum = '';
        },
        // 取消
        closeEdit(){
          this.editStatus = false
        },
        // 添加商品保存
        sureAdd(){
          this.shop.push({
          name: this.addName,
          price:this.addPrice,
          num:0,  
          });
          this.addName = '';
          this.addPrice = '';
        },
        // 删除
        del(i){
          console.log(i);
          this.shop.splice(i,1);
        }
      }
    }).mount("#content")
  </script>

效果图如下:

相关文章
|
25天前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
27天前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
|
1天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
25天前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
22 1
|
25天前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
27 1
|
25天前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
25天前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能
|
28天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
32 1
vue学习第一章
|
28天前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
26 1
vue学习第三章
|
28天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
35 1
vue学习第四章