uniapp实现购物车案例

387 阅读1分钟
  1. 创建一个uni-app项目,并在项目中创建购物车页面。

  2. 在购物车页面中,使用<template>标签创建购物车列表,可以使用v-for指令循环遍历购物车中的商品,并显示商品的名称、价格、数量等信息。

  3. <script>标签中定义购物车页面的逻辑。首先需要定义一个cart数组,用于存储购物车中的商品信息。可以使用uni.setStorageSyncuni.getStorageSync方法来实现购物车数据的本地存储和读取。

  4. 实现购物车页面的增加、减少数量和删除商品功能。可以通过点击加减按钮来改变商品数量,并实时更新购物车列表。点击删除按钮可以将商品从购物车中移除。

  5. 实现购物车页面的总价计算功能。可以使用computed属性来实时计算购物车中商品的总价,并显示在页面上。

  6. 在购物车页面中,添加结算按钮。点击结算按钮时,将购物车中的商品信息发送给后端接口进行处理。可以使用uni.request方法来发送异步请求,并使用async/await来处理异步操作。

<template>
  <view>
    <view v-for="(item, index) in cart" :key="index">
      <text>{{ item.name }}</text>
      <text>{{ item.price }}</text>
      <button @click="decrease(index)">-</button>
      <text>{{ item.quantity }}</text>
      <button @click="increase(index)">+</button>
      <button @click="remove(index)">删除</button>
    </view>
    <text>总价:{{ totalPrice }}</text>
    <button @click="checkout">结算</button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      cart: [],
    };
  },
  computed: {
    totalPrice() {
      return this.cart.reduce((total, item) => total + item.price * item.quantity, 0);
    },
  },
  methods: {
    decrease(index) {
      if (this.cart[index].quantity > 1) {
        this.cart[index].quantity--;
      }
    },
    increase(index) {
      this.cart[index].quantity++;
    },
    remove(index) {
      this.cart.splice(index, 1);
    },
    async checkout() {
      try {
        const response = await uni.request({
          url: '后端接口地址',
          method: 'POST',
          data: this.cart,
        });
        console.log(response.data);
      } catch (error) {
        console.error(error);
      }
    },
  },
  mounted() {
    // 从本地存储中读取购物车数据
    this.cart = uni.getStorageSync('cart') || [];
  },
  watch: {
    cart: {
      handler(newCart) {
        // 将购物车数据保存到本地存储
        uni.setStorageSync('cart', newCart);
      },
      deep: true,
    },
  },
};
</script>

在上述代码中,checkout方法使用async/await来发送异步请求,并将购物车数据作为请求的data参数发送给后端接口。在后端接口中,可以根据需求进行购物车数据的处理和结算操作。