Html|Vue实战小项目-购物车

简介: Html|Vue实战小项目-购物车

前言

在很多电商网站中,都有一个非常重要的功能,那就是购物车。接下来将使用Vue.js实现一个简易的购物车项目。实现的功能有全选或选择部分商品、计算总价、对商品数量进行增减、删除已添加至购物车的商品。

步骤

首先新建一个html文件,进行引入Vue.jshtml代码编写,效果图如上。

一、单个商品的价格计算

单个商品数量可以增减,但最少数量为1,而且数量的变化也会引起价格的变化。数量的变化通过点击+或-去调用add或reduce方法,+的时候数量加1,-的时候数量减1,并且在单个商品金额的地方调用计算单个商品总结的方法。

reduce: function (index) {  //减少商品

this.list[index].count --;

},

add: function (index) { //增加商品

this.list[index].count ++;

},

ofPrice: function (index) { //计算单个商品总价

  let ofPrice = 0;

ofPrice+=(this.list[index].price*this.list[index].count);

   return ofPrice.toString();

}

二、选择商品

在购物车里,可以选择想要结算的商品进行最后价格结算,商品总金额为已选择的商品的金额之和。需要绑定单选按钮的选中状态,选中为true,再次点击状态取反。

<td> // 单选商品

<input type="checkbox" :checked="item.check" @click="item.check = !item.check">

</td>

<th>全选<input id="all" @click="selAll" type="checkbox" checked></th>

selAll: function () {   //商品全选

let isAll = document.querySelector('#all');

if (isAll.checked == true) {

this.list.forEach(function(item, index) {

item.check = true;

})

} else {

this.list.forEach(function(item, index) {

item.check = false;

})

}

},

上面是商品的选择,还需要计算已选择商品的价格之和。

totalPrices: function () {  //计算总价

let totalPrices = 0;

this.list.forEach(function (val, index) {

if (val.check == true) //遍历商品,如果选中就进行计算。

totalPrices += parseFloat(val.price * val.count);

})

return totalPrices.toString();

},

三、删除商品

点击每个商品后的移除后就会将该商品从商品列表中删除

remove: function (index) {  //移除商品

    this.list.splice(index, 1);

},

四、完整代码

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>Title</title>

</head>

<body>

<div id="app" v-cloak>

    <template v-if="list.length">

        <table>

            <thead>

            <tr>

                <th>全选<input id="all" @click="selAll" type="checkbox" checked></th>

                <th>商品名称</th>

                <th>商品单价</th>

                <th>购买数量</th>

                <th>金额(元)</th>

                <th>操作</th>

            </tr>

            </thead>

            <tbody>

            <template v-for="(item, index) in list">

                <tr>

                    <td>

                        <input type="checkbox" :checked="item.check" @click="item.check = !item.check">

                    </td>

                    <td>

                        {{ item.name }}

                    </td>

                    <td>

                        {{ item.price }}

                    </td>

                    <td>

                        <button @click="reduce(index)" :disabled="item.count == 1">-</button>

                        {{ item.count }}

                        <button @click="add(index)">+</button>

                    </td>

                    <td>

                        {{ ofPrice(index) }}

                    </td>

                    <td>

                        <button @click="remove(index)">移除</button>

                    </td>

                </tr>

            </template>

            </tbody>

        </table>

        <div>总价: ¥ {{ totalPrices }}</div>

    </template>

    <template v-else>

        购物车没有商品

    </template>

</div>

<script src="../js/vue.js"></script>

<script>

    var app = new Vue({

        el: '#app',

        data: {

            list: [

                {

                    id: 1,

                    name: '矿泉水',

                    price: 2,

                    count: 1,

                    check: true,

                },

                {

                    id: 2,

                    name: '口香糖',

                    price: 2.5,

                    count: 1,

                    check: false,

                },

                {

                    id: 3,

                    name: '可乐',

                    price: 3,

                    count: 1,

                    check: true,

                },

            ]

        },

        methods: {

            remove: function (index) {  //移除商品

                this.list.splice(index, 1);

            },

            reduce: function (index) {  //减少商品

                this.list[index].count --;

            },

            add: function (index) { //增加商品

                this.list[index].count ++;

            },

            selAll: function () {   //商品全选

                let isAll = document.querySelector('#all');

                if (isAll.checked == true) {

                    this.list.forEach(function(item, index) {

                        item.check = true;

                    })

                } else {

                    this.list.forEach(function(item, index) {

                        item.check = false;

                    })

                }

            },

            ofPrice: function (index) { //计算单个商品总价

                let ofPrice = 0;

                ofPrice += (this.list[index].price * this.list[index].count);

                return ofPrice.toString();

            }

        },

        computed: {

            totalPrices: function () {  //计算总价

                let totalPrices = 0;

                this.list.forEach(function (val, index) {

                    if (val.check == true)

                        totalPrices += parseFloat(val.price * val.count);

                })

                return totalPrices.toString();

            },

        }

    })

</script>

</body>

</html>

目录
相关文章
|
2天前
|
缓存 JavaScript 算法
|
6天前
|
存储 JavaScript API
Vue 全局状态管理新宠:Pinia实战指南
 随着Vue.js项目的日益复杂,高效的状态管理变得至关重要。Pinia作为Vue.js官方推荐的新一代状态管理库,以其简洁的API和强大的功能脱颖而出。本文将带您快速上手Pinia,从安装到应用,轻松实现Vue.js项目的全局状态管理,提升开发效率和项目可维护性。
|
11天前
|
JavaScript 前端开发
在 JeecgBoot 项目中基于 Vue 3 配置多页面入口
本文介绍了在JeecgBoot Vue 3项目中配置多页面入口的步骤。首先,确保下载了项目源码,然后在项目根目录创建`home.html`作为新页面模板。接着,在`src`下建立`multiPage/home`目录,包含`App.vue`和`main.ts`文件以构建新页面。最后,更新`build/vite/plugin/html.ts`中的`htmlPlugin`以支持多页面配置。完成这些步骤后,项目将具备管理多个独立页面的能力。
23 4
|
21天前
vue3【实战】语义化首页布局
vue3【实战】语义化首页布局
34 2
|
21天前
|
存储 容器
vue3【实战】来回拖拽放置图片
vue3【实战】来回拖拽放置图片
27 2
|
23天前
|
JSON JavaScript 数据格式
文本-----wangEditor的使用,设置和获取内容,展示HTML无样式怎么办????console同步展示怎样写,Vue的配置在Vue3配置文件中的配置,是editor中的v-model绑定的值
文本-----wangEditor的使用,设置和获取内容,展示HTML无样式怎么办????console同步展示怎样写,Vue的配置在Vue3配置文件中的配置,是editor中的v-model绑定的值
|
23天前
|
JavaScript
文本,wangEditor5的基本使用,开发文档地址,wangEditor5用于Vue3项目,想要使用好wangEditor项目,得看开发文档
文本,wangEditor5的基本使用,开发文档地址,wangEditor5用于Vue3项目,想要使用好wangEditor项目,得看开发文档
|
22天前
|
存储 JavaScript 数据安全/隐私保护
vue实战——登录【详解】(含自适配全屏背景,记住账号--支持多账号,显隐密码切换,登录状态保持)
vue实战——登录【详解】(含自适配全屏背景,记住账号--支持多账号,显隐密码切换,登录状态保持)
28 1
|
22天前
|
JavaScript
vue实战——404页面模板001——男女手电筒动画
vue实战——404页面模板001——男女手电筒动画
21 1
|
15天前
|
JavaScript
【vue】vue 里面使用 v-html 插入的文本带有换行符‘\n‘不换行
【vue】vue 里面使用 v-html 插入的文本带有换行符‘\n‘不换行
60 0