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

         

该购物车效果采用的是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. day13 python迭代器与生成器

    迭代器 字符串.列表.元组.字典.集合都可以被for循环,说明他们都是可迭代的 可迭代协议 : 就是内部实现了__iter__方法 可以被for循环的都是可迭代的,要想可迭代,内部必须有一个__ite ...

  2. C#WFM关于PICBOX 再DIP界面放大125%后,图片显示不完整

    外观哪里选中Zoom,就好

  3. vue打包app嵌入h5,区分app进入和android,ios显示不同的下载链接

    vue打包app嵌入h5,区分app进入和android,ios显示不同的下载链接 需求:自己app打开的登录页面不显示app下载链接.其他地方打开判断android手机的跳转到android下载页链 ...

  4. mysql在Windows下使用mysqldump命令手动备份数据库和自动备份数据库

    手动备份: cmd控制台: 先进入mysql所在的bin目录下,如:cd C:\Program Files\MySQL\MySQL Server 5.5\bin mysqldump -u root - ...

  5. 利用Android-FingerprintManager类实现指纹识别

    安卓指纹识别 利用FingerprintManager主类进行指纹识别. Github项目地址 在安卓6.0中新增了API,FingerprintManager类,它是Google提供的帮助访问指纹硬 ...

  6. Bugku-CTF之welcome to bugkuctf(php://filter和php://input的妙用)

    Day24 welcome to bugkuctf http://123.206.87.240:8006/test1/ 本题要点:代码审计,PHP://filter ,  php://input ,  ...

  7. linux准备工具VMware以及ubuntu

    链接:https://pan.baidu.com/s/1j7DZCmzOcC2rPAciHtZgkA 密码:et5s

  8. SonarQube安装文档

    1.SonarQube 1.1 SonarQube介绍 SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误. SonarQube是否可以使用自定义规则由开发人员的开 ...

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

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

  10. cuda cudnn tensorflow-gpu安装

    Ububtu18.04下载cuda9.0 下载好后得到: CUDA 9.0仅支持GCC 6.0及以下版本,而Ubuntu 18.04预装GCC版本为7.3,需要安装gcc-6与g++-6 查看当前版本 ...