基于vuex实现购物车功能


Posted in Vue.js onJanuary 10, 2021

本文实例为大家分享了vuex实现购物车功能的具体代码,供大家参考,具体内容如下

先看效果:

基于vuex实现购物车功能

代码:

<template>
 <div class="Home">
 <h1>vuex购物车案例</h1>
 <add-from></add-from>
 <shop-cart></shop-cart>
 </div>
</template>

<script>
import AddFrom from './Add.vue'
import ShopCart from './ShopCart.vue'
// @ is an alias to /src
// import HelloWorld from '@/components/HelloWorld.vue'
export default {
 name: 'Home',
 components: {
 AddFrom,
 ShopCart
 },

};
</script>
<style>
table {
 width: 800px;
 margin: 0 auto;
 border: 1px solid #ccc;
 border-spacing: 0;
}
tbody th,
tbody td {
 border: 1px solid #ccc;
 text-align: center;
}
h1{
 text-align: center;
}
.add{
 width: 800px;
 margin: 0 auto;
}
</style>

父组件

<template>
 <div class="add">
 <div class="from-group">
 <label for="">商品编号</label>
 <input type="text" v-model="shop.id" placeholder="请输入商品编号">
 </div>
 <div class="from-group">
 <label for="">商品名称</label>
 <input type="text" v-model="shop.name" placeholder="请输入商品名称">
 </div>
 <div class="from-group">
 <label for="">商品价格</label>
 <input type="text" v-model="shop.price" placeholder="请输入商品价格">
 </div>
 <div class="from-group">
 <label for="">商品数量</label>
 <input type="text" v-model="shop.count" placeholder="请输入商品数量">
 </div>
 <div class="from-group">
 <button @click="add">添加商品</button>
 </div>
 </div>
</template>

<script>
export default {
 name: 'add',
 data() {
 return {
 shop:{}
 };
 },
 methods:{
 add(){
 
 this.$store.dispatch("addShopList",this.shop)
 this.shop = {
 id:"",
 name:"",
 price:"",
 count:""
 }
 }
 }
};
</script>

<style scoped>
 .add{
 width: 800px;
 text-align: center;
 }
</style>

```bash

<template>
 <div class="Shop-Cart">

 <table>
 <thead border>
 <tr>
  <th>商品编号</th>
  <th>商品名称</th>
  <th>商品价格</th>
  <th>商品数量</th>
  <th>小计</th>
  <th>操作</th>
 </tr>
 </thead>
 <tbody v-if="shop.length > 0">
 <tr v-for="(i, e) in shop" :key="e">
  <td>{{ i.id }}</td>
  <td>{{ i.name }}</td>
  <td>{{ i.price }}</td>
  <td>
  <button @click="add(e)">+</button>
  <input type="text" v-model="i.count" />
  <button @click="delet(e)">-</button>
  </td>
  <td>¥{{ i.price * i.count }}</td>
  <td><button @click="del(e)">删除</button></td>
 </tr>
 </tbody>
 <tfoot>
 <tr>
  <td colspan="6" align="right">总计:{{ total }}</td>
  <button @click="clear">清除购物车</button>
 </tr>
 </tfoot>
 </table>
 </div>
</template>

<script>
export default {
 name: 'Shop-Cart',
 components: {},
 data() {
 return {};
 },
 computed: {
 shop() {
 return this.$store.getters.getlist;
 },
 total() {
 return this.$store.getters.getShopTotal;
 }
 },
 methods: {
 del(e) {
 // this.$store.dispatch()
 this.$store.dispatch('remoteList', e);
 },

 add(e) {
 this.$store.dispatch('addList', e);
 },
 delet(e) {
 this.$store.dispatch('deleteList', e);
 },

 clear() {
 this.$store.dispatch('clearList', []);
 }
 }
};
</script>

vuex组件

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)


export default new Vuex.Store({
 state: {
 list: [{
 id: 1,
 name: "哇哈哈",
 price: 3,
 count: 0
 },
 {
 id: 2,
 name: "哇哈",
 price: 3,
 count: 0
 }
 ]
 },
 getters: {
 //获取购物车数据
 getlist(state) {
 return state.list
 },
 //商品的总价
 getShopTotal(state,index) {
 let result = 0;
 state.list.forEach((item, index) => {
 result += item.price * item.count
 })
 return result
 },
 },
 mutations: {
 //删除购物车单个数据
 remoteList(state,index) {
 state.list.splice(index, 1);
 console.log("aaa",state)
 },
 //商品数量增加
 addList(state, index) {
 state.list[index].count++;
 },
 //商品数量减少
 deleteList(state, index) {
 state.list[index].count--;
 if(state.list[index].count<=0){
 state.list[index].count = 0
 return ;
 }
 },

 //清除购物车
 clearList(state, arr) {
 state.list = arr
 },
 addShopList(state,shop){
 state.list.push(shop)
 }
 },
 //使用actions调用mutations方法
 actions: {
 remoteList({
 commit
 }, index) {
 commit("remoteList", index)
 },
 addList({
 commit
 }, index) {
 commit("addList", index)
 },
 deleteList({
 commit
 }, index) {
 commit("deleteList", index)
 },
 clearList({
 commit
 }, arr) {
 commit("clearList", arr)
 },
 addShopList({commit},shop){
 commit("addShopList",shop)
 }
 },
 modules: {}
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
vue 插槽简介及使用示例
Nov 19 Vue.js
vue中如何自定义右键菜单详解
Dec 08 Vue.js
Vue如何跨组件传递Slot的实现
Dec 14 Vue.js
vue 通过base64实现图片下载功能
Dec 19 Vue.js
Vue使用Ref跨层级获取组件的步骤
Jan 25 Vue.js
Vue包大小优化的实现(从1.72M到94K)
Feb 18 Vue.js
Vue3.0写自定义指令的简单步骤记录
Jun 27 Vue.js
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 Vue.js
vue修饰符.capture和.self的区别
Apr 22 Vue.js
vue @click.native 绑定原生点击事件
Apr 22 Vue.js
vue el-table实现递归嵌套的示例代码
Aug 14 Vue.js
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 #Vue.js
vue-quill-editor插入图片路径太长问题解决方法
Jan 08 #Vue.js
vue编写简单的购物车功能
Jan 08 #Vue.js
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 #Vue.js
vuex的使用和简易实现
Jan 07 #Vue.js
vue watch监控对象的简单方法示例
Jan 07 #Vue.js
vue.js watch经常失效的场景与解决方案
Jan 07 #Vue.js
You might like
如何写php程序?
2006/12/08 PHP
PHP生成Flash动画的实现代码
2010/03/12 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
php使用指定编码导出mysql数据到csv文件的方法
2015/03/31 PHP
php+ajax实现仿百度查询下拉内容功能示例
2017/10/20 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
angularjs点击图片放大实现上传图片预览
2017/02/24 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
CSS3改变浏览器滚动条样式
2019/01/04 HTML / CSS
html5 canvas 使用示例
2010/10/22 HTML / CSS
HTML5使用ApplicationCache接口实现离线缓存技术解决离线难题
2012/12/13 HTML / CSS
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
广告学毕业生求职信
2014/01/30 职场文书
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
《钱学森》听课反思
2014/03/01 职场文书
英语教师岗位职责
2014/03/16 职场文书
普通党员对照检查材料
2014/08/28 职场文书
七一建党日演讲稿
2014/09/05 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
民事和解协议书格式
2014/11/29 职场文书
入团申请书格式
2019/06/20 职场文书