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>

目录
相关文章
|
4天前
|
JSON 数据可视化 数据库
vue3+threejs+koa可视化项目——实现登录注册(第三步)
vue3+threejs+koa可视化项目——实现登录注册(第三步)
25 5
|
4天前
|
数据可视化 前端开发 JavaScript
vue3+threejs可视化项目——引入threejs加载钢铁侠模型(第二步)
vue3+threejs可视化项目——引入threejs加载钢铁侠模型(第二步)
41 3
|
4天前
|
JavaScript 数据可视化 算法
vue3+threejs可视化项目——搭建vue3+ts+antd路由布局(第一步)
vue3+threejs可视化项目——搭建vue3+ts+antd路由布局(第一步)
24 6
|
14小时前
|
移动开发 前端开发 JavaScript
【专栏:HTML与CSS实战项目篇】使用HTML5与CSS3制作一个动态表单验证页面
【4月更文挑战第30天】本文介绍了使用HTML5和CSS3创建动态表单验证页面的方法。首先,简述HTML5用于构建网页内容,CSS3用于描述样式。接着,分四步展示实现过程:1) 设计包含输入框和提示信息的表单结构;2) 使用CSS3创建样式,增强视觉效果;3) 使用JavaScript监听输入事件,动态验证表单并显示错误信息;4) 测试和调试确保跨平台兼容性。通过学习,开发者能掌握创建带验证功能的表单,提升用户体验。
|
4天前
|
JSON 数据可视化 前端开发
vue3+threejs+koa可视化项目——模型文件上传(第四步)
vue3+threejs+koa可视化项目——模型文件上传(第四步)
15 7
|
5天前
|
JavaScript 安全 前端开发
Vue 项目中的权限管理:让页面也学会说“你无权访问!
Vue 项目中的权限管理:让页面也学会说“你无权访问!
14 3
|
5天前
|
JavaScript
【vue实战】父子组件互相传值
【vue实战】父子组件互相传值
11 1
|
5天前
|
人工智能 JavaScript 前端开发
Vue / Html 等前台中连续多个空格只显示一个空格的解决方法
Vue / Html 等前台中连续多个空格只显示一个空格的解决方法
|
6天前
|
JSON JavaScript 数据格式
python遍历目录文件_结合vue获取所有的html文件并且展示
python遍历目录文件_结合vue获取所有的html文件并且展示
4 0
|
7天前
|
资源调度 JavaScript Linux
VueCLI:Vue项目脚手架与构建工具技术详解
【4月更文挑战第24天】VueCLI是Vue.js官方的项目脚手架,简化创建与配置,提供丰富的插件系统,支持全生命周期功能,如代码编译、打包部署。它具有易于配置、跨平台支持等优势。通过安装、创建项目、运行及构建命令,开发者能快速搭建Vue应用。VueCLI允许自定义配置(vue.config.js)和安装各类插件,如vue-router、vuex,以适应不同项目需求,提高开发效率。