本人写的小程序,功能还在完善中,欢迎扫一扫提出宝贵意见!

         

该购物车效果采用的是Element-ui库实现的。

采用了computed计算属性来实现逻辑操作。

功能分析:

  1. 全选/全不选/单选。
  2. 数量增加、数量减少。
  3. 总金额=数量*单价。
  4. 商品总价:每一项的总金额相加。
  5. 商品总数:每一项的数量相加。
  6. 删除功能。

废话不多说,复制粘贴看效果:

 <template>
<div class="cart">
<div class="group_btn">
<el-button type="success" @click="addDialog">添加</el-button>
</div>
<el-table
:data="tableData"
border
style="width: 100%"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center"></el-table-column>
<el-table-column type="index" label="序号" width="180" align="center"></el-table-column>
<el-table-column prop="name" label="类目" width="180" align="center"></el-table-column>
<el-table-column prop="price" label="价格" align="center"></el-table-column>
<el-table-column label="数量" align="center">
<template slot-scope="scope">
<el-input-number v-model="scope.row.number" :min="1" :max="10" label="描述文字"></el-input-number>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button size="mini" @click="editDialog(scope.$index, scope.row)">编辑</el-button>
<el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="total_warpper">
<h3>共计:{{totalPrice}}</h3>
<h3>总数:{{totalNumber}}</h3>
</div>
<!-- 添加弹窗的内容 -->
<el-dialog title="添加信息" :visible.sync="addIsDialog" class="addDialog">
<el-form :model="formData">
<el-form-item label="类目" :label-width="formLabelWidth">
<el-input v-model="formData.name" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="价格" :label-width="formLabelWidth">
<el-input v-model="formData.price" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="数量" :label-width="formLabelWidth">
<el-input v-model="formData.number" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="addIsDialog = false">取 消</el-button>
<el-button type="primary" @click="addSureBtn">确 定</el-button>
</div>
</el-dialog>
<!-- 添加编辑的内容 -->
<el-dialog title="添加信息" :visible.sync="editIsDialog" class="addDialog">
<el-form :model="editData">
<el-form-item label="类目" :label-width="formLabelWidth">
<el-input v-model="editData.name" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="价格" :label-width="formLabelWidth">
<el-input v-model="editData.price" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="数量" :label-width="formLabelWidth">
<el-input v-model="editData.number" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="editIsDialog = false">取 消</el-button>
<el-button type="primary" @click="editSureBtn">确 定</el-button>
</div>
</el-dialog>
</div>
</template> <script>
export default {
data() {
return {
editIsDialog: false, //编辑弹窗
addIsDialog: false, //添加弹窗
multipleSelection: [], //存放已选择的数据
formData: {
name: "",
price: "",
number: ""
},
editData: {},
formLabelWidth: "200",
//表格中的数据
tableData: [
{
name: "苹果",
price: 10,
number: 1
},
{
name: "香蕉",
price: 20,
number: 1
},
{
name: "草莓",
price: 5,
number: 1
}
]
};
},
methods: {
// 点击发生的变化
handleSelectionChange(val) {
this.multipleSelection = val; //给定义的数组赋值
},
handleDelete(index, row) {
this.tableData.splice(index, 1); //删除表格的数据
},
// 点击弹出添加弹窗
addDialog() {
this.addIsDialog = true;
},
// 点击添加弹窗的确定按钮
addSureBtn() {
this.addIsDialog = false;
this.tableData.push(this.formData);
// 初始化添加表单
this.formData = {
name: "",
age: "",
sex: ""
};
},
// 点击弹出添加弹窗
editDialog(index, row) {
this.editIsDialog = true;
this.editData = row;
},
editSureBtn(row, index) {
this.editIsDialog = false;
}
},
// 通过computed计算属性及时改变
computed: {
// 总价
totalPrice() {
var price_total = 0;
for (var i = 0; i < this.multipleSelection.length; i++) {
price_total +=
this.multipleSelection[i].price * this.multipleSelection[i].number;
}
return price_total;
},
// 总数
totalNumber() {
var number_total = 0;
for (var i = 0; i < this.multipleSelection.length; i++) {
number_total += this.multipleSelection[i].number;
}
return number_total;
}
},
components: {}
};
</script> <style scoped>
.cart {
margin: 50px auto;
width: 1000px;
}
.group_btn {
margin-bottom: 30px;
}
.addDialog .el-input {
width: 90%;
}
.total_warpper {
text-align: right;
margin-top: 30px;
}
h3 {
margin-top: 10px;
}
</style> 

若有不明白请加群号:复制 695182980 ,也可扫码,希望能帮助到大家。

Vue+Element+computed实现购物车的更多相关文章

  1. 前端小菜鸡使用Vue+Element笔记(一)

    关于使用Vue+Element的项目简介~ 最近因为项目组缺前端人员,所以自己现学现做页面,先把前后台功能调通 觉得前端可真的是不容易呀哎呀~ 首先记录一下相关的Vue入门的教程: vue环境搭建示例 ...

  2. vue+element ui 的上传文件使用组件

    前言:工作中用到 vue+element ui 的前端框架,使用到上传文件,则想着封装为组件,达到复用,可扩展.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9 ...

  3. (vue.js)Vue element tab 每个tab用一个路由来管理?

    (vue.js)Vue element tab 每个tab用一个路由来管理? 来源:网络整理     时间:2017/5/13 0:24:01     关键词:   关于网友提出的“ (vue.js) ...

  4. Vue Element使用第三库icon图标

    一:引入单设图标 1.打开 阿里icon,注册 >登录>图标管理>我的项目 2.新建项目 返回阿里icon首页,点进去你想要的icon库,因为没有批量导入购物车,所以一般情况下需要一 ...

  5. Vue Element 使用 icon 图标 (第三方)

    Vue Element 使用 icon 图标 (第三方) element-ui 自带的图标库还是不够全, 还是需要需要引入第三方 icon, 自己在用的时候一直有些问题, 参考了些教程, 详细地记录补 ...

  6. 循序渐进VUE+Element 前端应用开发(4)--- 获取后端数据及产品信息页面的处理

    在前面随笔<循序渐进VUE+Element 前端应用开发(3)--- 动态菜单和路由的关联处理>中介绍了在Vue + Element整合框架中,实现了动态菜单和动态路由的处理,从而可以根据 ...

  7. 循序渐进VUE+Element 前端应用开发(11)--- 图标的维护和使用

    在VUE+Element 前端应用中,图标是必不可少点缀界面的元素,因此整合一些常用的图标是非常必要的,还好Element界面组件里面提供了很多常见的图标,不过数量不是很多,应该是300个左右吧,因此 ...

  8. 封装Vue Element的form表单组件

    前两天封装了一个基于vue和Element的table表格组件,阅读的人还是很多的,看来大家都是很认同组件化.高复用这种开发模式的,毕竟开发效率高,代码优雅,逼格高嘛.虽然这两天我的心情很糟糕,就像& ...

  9. 封装Vue Element的可编辑table表格组件

    前一段时间,有博友在我那篇封装Vue Element的table表格组件的博文下边留言说有没有那种"表格行内编辑"的封装组件,我当时说我没有封装过这样的组件,因为一直以来在实际开发 ...

随机推荐

  1. HTTP笔记1

    传输层:提供进程地址 TCP:传输控制协议,面向连接的协议:通信前需要建立虚拟链路:结束后拆除链路.端口号:0-65535 UDP:用户报文协议,无连接的协议.端口号:0-65535 IANA(互联网 ...

  2. LR12脚本录制流程

    准备工作: 工具:win7系统.loadrunner 12.Firefox浏览器.飞机订票系统. 打开飞机订票系统 开始录制脚本 步骤一:打开loadrunner(Virtual User Gener ...

  3. python:sys.exit() os._exit() exit() quit()

    1>sys.exit() >>> import sys>>> help(sys.exit)Help on built-in function exit in ...

  4. 从Node到Go的心路之旅

    我最近将一个系统从Node重构到了Go,花了大概两周多的时间,这个过程也是不得已而为之,因为公司开发的系统最终需要部署到客户的服务器,而又不想暴露源码. 但是NodeJs开发的系统却无法从根本上来保护 ...

  5. Spring restful

    1. RESTful 不是一项技术,也不是一个标准,而是一种风格,跟servlet不在一个层面上,根本无法比较.一个基于servlet的application也是可以是符合RESTful风格的,换言之 ...

  6. python画手绘图

    第一步:插入代码 #e17.1HandDrawPic.py from PIL import Image import numpy as np vec_el = np.pi/2.2 # 光源的俯视角度, ...

  7. Bugku-CTF之flag.php(点了login咋没反应)

    Day20 flag.php 地址:http://123.206.87.240:8002/flagphp/   点了login咋没反应 提示:hint 

  8. CEF 支持JSON操作

    转载:https://blog.csdn.net/foruok/article/details/50687864(解析json) 转载:https://blog.csdn.net/foruok/art ...

  9. SAP 打印自动导出PDF本地文件(自己做的例子)

    smartforms导出PDF: 常用函数有: convert_otfconvert_otfspooljob_2_pdfconvert_abapspooljob_2_pdfCONVERT_OTF_2_ ...

  10. Java基础学习-Random类和Java数组

    1.随机数类(Random) package com.denniscui;   import java.util.Random; /*  * Random:用于产生随机数  *  * 使用步骤:  * ...