锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. 前端
  4. VUE实现简易购物车

VUE实现简易购物车

0
  • 前端
  • 发布于 2024-09-26
  • 12 次阅读
黄健
黄健

主要是对基础的指令的使用,直接上代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style type="text/css">
        table {
            width: 500px;
            text-align: center;
            border-collapse: collapse;

        }

        table,
        th,
        td {
            border: 3px double black;
        }
        input{
            width: 120px;
        }
    </style>
    <script src="https://cdn.jsdelivr.net/npm/vue@3.2.31/dist/vue.global.js"></script>
</head>

<body>
    <div id="falsebody">
        <table id="tableBox" cellspacing="0" cellpadding="9">
            <tr>
                <td>名称</td>
                <td>价格</td>
                <td>数量</td>
                <td>操作</td>
            </tr>


            <tbody>
                <tr v-for="(item,index) in goods" @click="changeColor(index)"
                    :style="{backgroundColor: k != index ? '' : '#0078D4'}">
                    <td>{
  {item.name}}</td>
                    <td>¥{
  {item.price}}</td>
                    <td>
                        <button type="button" @click="redruce(index)">-</button>
                        {
  {item.num}}
                        <button type="button" @click="plus(index)">+</button>
                    </td>
                    <td>
                        <button type="button" @click="editBlock(item,index)">编辑</button>
                        <button type="button" @click="del(index)">删除</button>
                    </td>
                </tr>
            </tbody>

            <tfoot>
                <tr>
                    <td></td>
                    <td>总价:¥{
  {allPrice}}</td>
                    <td>总数量:{
  {allNum}}</td>
                    <td></td>
                </tr>
            </tfoot>
        </table>



        <button type="button" @click="addBlock()">添加商品</button>


        <div v-show="addShow">
            <input v-model="name" type="text" name="" value="" placeholder="名称" />&nbsp;
            <input v-model="price" type="number" name="" value="" placeholder="价格" />&nbsp;
            <input v-model="num" type="number" name="" value="" placeholder="数量" />&nbsp;
            <button type="button" @click="addSure()">确定</button>&nbsp;
            <button type="button" @click="addCancel()">取消</button>
        </div>


        <div v-show="editShow">
            <input v-model="editname" type="text" name="" />&nbsp;
            <input v-model="editprice" type="number" name="" />&nbsp;
            <input v-model="editnum" type="number" name="" />&nbsp;
            <button type="button" @click="editSure()">确定</button>&nbsp;
            <button type="button" @click="editCancel()">取消</button>
        </div>
    </div>

    <script>
        let { createApp, ref, reactive } = Vue;
        createApp({
            setup() {

                //假数据
                const goods = ref([
                    {
                        "name": "衣服",
                        "price": 39,
                        "num": 1
                    },
                    {
                        "name": "鞋子",
                        "price": 69,
                        "num": 1
                    }
                ])

                //减少商品数量
                function redruce(i) {
                    goods.value[i].num--;
                    // 不能减到负数
                    if (goods.value[i].num <= 0) {
                        goods.value[i].num = 0;
                    }
                    calculation();
                }

                //增加商品数量
                function plus(i) {
                    goods.value[i].num++;
                    calculation();
                };


                // 声明一个变量计算总价
                let allPrice = ref(0);
                // 声明一个变量计算总数量
                let allNum = ref(0);


                calculation();
                //计算总价格和总数量
                function calculation() {
                    allPrice.value = 0;
                    allNum.value = 0;
                    for (let i in goods.value) {
                        allPrice.value += goods.value[i].num * goods.value[i].price;
                        allNum.value += goods.value[i].num;
                    };
                };


                // 默认隐藏添加输入框
                let addShow = ref(false);

                // v-model添加 获取输入框输入的新数据
                let name = ref('');
                let price = ref('');
                let num = ref('');

                //点击添加
                function addBlock() {
                    name.value = '';
                    price.value = '';
                    num.value = '';
                    addShow.value = true;
                };

                //点击确定添加
                function addSure() {
                    // 判断不为空
                    if (name.value != '' && price.value != '' && num.value != '') {
                        // 添加的新数据
                        let newData = {
                            name: name.value,
                            price: price.value,
                            num: num.value
                        };

                        goods.value.push(newData);
                        addShow.value = false;
                        calculation();
                    };
                };
                //点击取消添加
                function addCancel() {
                    name.value = '';
                    price.value = '';
                    num.value = '';
                    addShow.value = false;
                };

                // v-model编辑 更改元数据
                let editname = ref('');
                let editprice = ref('');
                let editnum = ref('');
                //编辑的默认数据
                let defaultData = reactive(
                    {
                        editname: '',
                        editprice: '',
                        editnum: ''
                    }
                );


                //默认隐藏编辑输入框
                let editShow = ref(false);

                let index;// 接收点击编辑时传的下标
                //点击编辑按钮
                function editBlock(item, i) {
                    Object.assign(defaultData, item);
                    editname.value = item.name;
                    editprice.value = item.price;
                    editnum.value = item.num;
                    index = i;
                    editShow.value = true;
                };

                //点击确定编辑
                function editSure() {
                    goods.value[index].name = editname.value;
                    goods.value[index].price = editprice.value;
                    goods.value[index].num = editnum.value;
                    calculation();
                    editShow.value = false;
                };

                //点击取消编辑
                function editCancel() {
                    editShow.value = false;
                };

                //点击删除
                function del(i) {
                    goods.value.splice(i, 1);
                    editShow.value = false;
                    calculation();
                };





                //点击商品操作时改变背景颜色
                let k = ref();

                //点击换色
                function changeColor(i) {
                    k.value = i;
                };

                return {
                    goods,
                    allNum,
                    allPrice,
                    redruce,
                    plus,
                    name,
                    num,
                    price,

                    addShow,
                    addBlock,
                    addSure,
                    addCancel,

                    editShow,
                    defaultData,
                    editname,
                    editprice,
                    editnum,
                    editBlock,
                    editSure,
                    editCancel,

                    del,

                    k,
                    changeColor
                }
            }


        }).mount('#falsebody');

    </script>
</body>

</html>


原文链接: https://blog.csdn.net/hexadecimal_001/article/details/140076954

标签: #前端 145 #VUE 61
相关文章

vue2路由和vue3路由区别及原理 2024-10-08 11:24

一、Vue2 与 Vue3 路由的区别 1. 创建路由实例方式的不同 Vue 2 中,通过 Vue.use() 注册路由插件,并通过 new VueRouter() 来创建路由实例。 import Vue from 'vue';import VueRouter from 'vue-router';i

vue项目 部署到nginx 上刷新页面显示404 2024-09-30 17:34

在Vue项目部署到Nginx服务器上时,遇到刷新页面显示404的问题,通常是因为Nginx无法正确地处理Vue路由(尤其是单页面应用(SPA)中的前端路由)。Vue应用的路由是前端路由,依赖于JavaScript来动态解析URL,当直接访问除根路径外的URL时,Nginx默认会尝试在服务器上找到对应

三小时快速上手TypeScript,TS速通教程(上篇、中篇、下篇、附加篇) 2024-09-29 11:21

TypeScript速通 Typescript简介 为什么需要TypeScript * JavaScript今非昔比 JavaScript中的困扰 1. 不清不楚的数据类型 2. 有漏洞的逻辑 3. 访问不存在的属性 4. 低级的拼写错误 TypeScrip

js中的事件冒泡是什么? 2024-09-29 11:21

事件冒泡(Event Bubbling)是JavaScript中一种事件传播机制。当一个事件(如点击、键盘输入等)发生在某个元素上时,浏览器会首先触发该元素上的特定事件处理函数(如果存在的话)。然后,该事件会从当前元素向其父元素逐级传播,直到达到元素或整个文档树。这种从触发元素开始,逐级向上传播的事

Vue.js 的 Mixins 2024-09-26 17:57

Vue.js 的 Mixins 是一种非常强大且灵活的功能,它允许你封装可复用的 Vue 组件选项。Mixins 实际上是一种分发 Vue 组件可复用功能的非常灵活的方式。一个 mixin 对象可以包含任意组件选项。当组件使用 mixin 时,所有 mixin 选项将被"混入"该组件本身的选项。 M

前端框架对比和选择 2024-09-26 17:57

在前端开发的广阔领域中,框架的选择对于项目的成功至关重要。不同的框架各具特色,适用于不同的开发需求和项目规模。本文将对当前最流行的三大前端框架——React、Vue和Angular进行详细对比,并探讨如何根据项目需求选择合适的框架。 一、React 1. 简介 React是由Facebook开发和维

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.