1 回复
针对uni-app实现京东购物车插件的需求,以下是一个简化的代码案例,展示如何使用Vue.js和uni-app框架创建一个基本的购物车功能。这个示例包括商品列表、添加到购物车、购物车展示以及计算总价等核心功能。
1. 项目结构
假设项目结构如下:
- pages
- index
- index.vue (商品列表页面)
- cart
- cart.vue (购物车页面)
- store
- index.js (Vuex状态管理)
- main.js (入口文件)
2. Vuex 状态管理 (store/index.js)
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
cart: []
},
mutations: {
ADD_TO_CART(state, product) {
const item = state.cart.find(item => item.id === product.id);
if (item) {
item.quantity += 1;
} else {
state.cart.push({ ...product, quantity: 1 });
}
}
},
getters: {
cartItems: state => state.cart,
cartTotal: state => state.cart.reduce((total, item) => total + item.price * item.quantity, 0)
}
});
3. 商品列表页面 (pages/index/index.vue)
<template>
<view>
<block v-for="product in products" :key="product.id">
<view>
{{ product.name }} - {{ product.price }}
<button @click="addToCart(product)">加入购物车</button>
</view>
</block>
<navigator url="/pages/cart/cart">前往购物车</navigator>
</view>
</template>
<script>
export default {
data() {
return {
products: [
{ id: 1, name: '商品A', price: 100 },
{ id: 2, name: '商品B', price: 200 }
]
};
},
methods: {
addToCart(product) {
this.$store.commit('ADD_TO_CART', product);
}
}
};
</script>
4. 购物车页面 (pages/cart/cart.vue)
<template>
<view>
<block v-for="item in cartItems" :key="item.id">
<view>
{{ item.name }} - {{ item.price }} x {{ item.quantity }}
</view>
</block>
<view>总价: {{ cartTotal }}</view>
</view>
</template>
<script>
import { mapGetters } from 'vuex';
export default {
computed: {
...mapGetters(['cartItems', 'cartTotal'])
}
};
</script>
5. 入口文件 (main.js)
确保在main.js中引入Vuex并挂载到Vue实例上。
import Vue from 'vue';
import App from './App';
import store from './store';
Vue.config.productionTip = false;
App.mpType = 'app';
const app = new Vue({
store,
...App
});
app.$mount();
这个示例展示了如何使用Vuex管理购物车状态,并在不同页面间共享数据。根据实际需求,你可以进一步扩展和优化这个基础代码。