Vue+Element+computed实现购物车
本人写的小程序,功能还在完善中,欢迎扫一扫提出宝贵意见!

该购物车效果采用的是Element-ui库实现的。
采用了computed计算属性来实现逻辑操作。
功能分析:
- 全选/全不选/单选。
- 数量增加、数量减少。
- 总金额=数量*单价。
- 商品总价:每一项的总金额相加。
- 商品总数:每一项的数量相加。
- 删除功能。
废话不多说,复制粘贴看效果:
<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实现购物车的更多相关文章
- 前端小菜鸡使用Vue+Element笔记(一)
关于使用Vue+Element的项目简介~ 最近因为项目组缺前端人员,所以自己现学现做页面,先把前后台功能调通 觉得前端可真的是不容易呀哎呀~ 首先记录一下相关的Vue入门的教程: vue环境搭建示例 ...
- vue+element ui 的上传文件使用组件
前言:工作中用到 vue+element ui 的前端框架,使用到上传文件,则想着封装为组件,达到复用,可扩展.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9 ...
- (vue.js)Vue element tab 每个tab用一个路由来管理?
(vue.js)Vue element tab 每个tab用一个路由来管理? 来源:网络整理 时间:2017/5/13 0:24:01 关键词: 关于网友提出的“ (vue.js) ...
- Vue Element使用第三库icon图标
一:引入单设图标 1.打开 阿里icon,注册 >登录>图标管理>我的项目 2.新建项目 返回阿里icon首页,点进去你想要的icon库,因为没有批量导入购物车,所以一般情况下需要一 ...
- Vue Element 使用 icon 图标 (第三方)
Vue Element 使用 icon 图标 (第三方) element-ui 自带的图标库还是不够全, 还是需要需要引入第三方 icon, 自己在用的时候一直有些问题, 参考了些教程, 详细地记录补 ...
- 循序渐进VUE+Element 前端应用开发(4)--- 获取后端数据及产品信息页面的处理
在前面随笔<循序渐进VUE+Element 前端应用开发(3)--- 动态菜单和路由的关联处理>中介绍了在Vue + Element整合框架中,实现了动态菜单和动态路由的处理,从而可以根据 ...
- 循序渐进VUE+Element 前端应用开发(11)--- 图标的维护和使用
在VUE+Element 前端应用中,图标是必不可少点缀界面的元素,因此整合一些常用的图标是非常必要的,还好Element界面组件里面提供了很多常见的图标,不过数量不是很多,应该是300个左右吧,因此 ...
- 封装Vue Element的form表单组件
前两天封装了一个基于vue和Element的table表格组件,阅读的人还是很多的,看来大家都是很认同组件化.高复用这种开发模式的,毕竟开发效率高,代码优雅,逼格高嘛.虽然这两天我的心情很糟糕,就像& ...
- 封装Vue Element的可编辑table表格组件
前一段时间,有博友在我那篇封装Vue Element的table表格组件的博文下边留言说有没有那种"表格行内编辑"的封装组件,我当时说我没有封装过这样的组件,因为一直以来在实际开发 ...
随机推荐
- 解决Linux 环境 GLIBCXX_3.4.15' not found问题
升级Centos系统之后,运行filezilla时,出现如下错误的提示信息: ./filezilla: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15 ...
- html5 css练习 定位布局
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- Linux基础篇
Linux入门 2.1 Linux介绍 1)Linux是一款操作系统,特点:免费.开源.安全.高效.稳定.处理高并发非常强悍,半年至一年重启一次机即可,比Windows强悍,现在很多企业级项目都部署到 ...
- java 类、方法、代码块修饰式关键字总结
super 关键字 this和super的区别 访问成员的区别 this关键字 this特点 this使用场景 static关键字 例子 访问权限修饰符 特点 总结: 四个修饰符的特点 访问权限修饰符 ...
- 全网搜歌神器Listen1 Mac中文版
listen1 for mac中文版是mac上一款强大的全网搜歌音乐播放器,支持网易云音乐.QQ音乐.虾米音乐.酷狗音乐以及酷我音乐等网站的歌曲搜索播放功能,拥有创建歌单.随心播放.歌曲收藏.快速搜索 ...
- Java 新建excle文件并填充模版内容
Java 新建excle文件并填充模版内容 一.JAR import java.io.BufferedReader; import java.io.File; import java.io.FileI ...
- layui 单选项 点击显示与隐藏
同一个页面有多个单选按钮:https://blog.csdn.net/haibo0668/article/details/86220767
- CefSharp浏览器网页中文语言设置
设置浏览器语言而非cef语言 ChromiumWebBrowser browser = new ChromiumWebBrowser(url); BrowserSettings browserSett ...
- 关于matplotlib绘制直方图偏移的问题
在使用pyplot绘制直方图的时候我发现了一个问题,在给函数.hist()传参的时候,如果传入的组数不是刚刚好(就是说这个组数如果是使用(最大值-最小值)/组距计算出来,而这个数字不是整除得来而是取整 ...
- python程序—名片管理系统
创建一个名片管理系统,实现增.删.改.查.四项功能 listcard = [] while True: print('**********欢迎来到名片管理系统**********') print(' ...