用vue实现购物车增删改

这是一个关于Vue.js实现的购物车应用示例。博客详细介绍了如何使用Vue.js的数据绑定和事件处理来创建全选、商品增减、删除及总价计算等功能。表格布局和样式设计使得用户界面友好,同时通过计算属性计算选中商品的总价。代码示例展示了如何在Vue组件中操作数据和响应用户操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<template>
  <div>
    <table>
      <thead>
        <tr>
          <!-- 绑定全选事件 -->
          <th><input type="checkbox" @change="addAll" />全选</th>
          <th>商品名</th>
          <th>单价</th>
          <th>数量</th>
          <th>小计</th>
          <th>操作</th>
        </tr>
      </thead>
      <tbody>
        <!-- 先让他们循环 用结构语法写-->
        <tr v-for="({ name, price, num }, i) in products" :key="i">
          <!-- v-model要存data的值 -->
          <td><input type="checkbox" v-model="products[i].checked" /></td>
          <td>{{ name }}</td>
          <td>{{ price }}</td>
          <td>
            <!-- products是一个数组 下标可以找到对象 意思就是这个数组下的某个对象的某个属性 -->
            <button @click="products[i].num--" :disabled="num == 1">-</button>
            <!-- 这是个双向绑定 -->
            <input type="text" v-model="products[i].num" />
            <button @click="products[i].num++">+</button>
          </td>
          <td>{{ num * price }}</td>
          <!-- 怎么删除数组中的某个元素:splice(i,n) 删除序号i开始的n个元素-->
          <td>
            <button @click="products.splice(i, 1)">删除</button>
          </td>
        </tr>
      </tbody>
      <tfoot>
        <tr>
          <td colspan="6">总价格:{{ sum }}</td>
        </tr>
      </tfoot>
    </table>
  </div>
</template>

<script>
export default {
  // 全选操作事件
  methods: {
    addAll(e) {
      //遍历每个元素的checked 都变成和全选一样
      this.products.forEach((p) => (p.checked = e.target.checked));
      console.log(e.target.checked);
    },
    removeP(i) {
      this.products.splice(i, 1);
    },
  },
  computed: {
    sum() {
      // 只加勾选了的
      return this.products.reduce((s, p) => s + p.price * p.num * p.checked, 0);
    },
  },
  data() {
    return {
      products: [
        { name: "草莓", price: 7, num: 18, checked: true },
        { name: "橘子", price: 8, num: 11, checked: false },
        { name: "西瓜", price: 9, num: 12, checked: true },
        { name: "哈密瓜", price: 10, num: 13, checked: false },
        { name: "苹果", price: 11, num: 14, checked: false },
      ],
    };
  },
};
</script>

<style lang="scss" scoped>
//写table样式
table {
  //点击文字的时候不要有选中效果
  user-select: none;
  //边框合并,如果不把单元格合并单元格和单元格之间有缝隙
  border-collapse: collapse;

  // 给td和th加样式
  th,
  td {
    //给边
    border: 1px solid rgb(86, 86, 155);
    //给内容和边框之间的间距 上下5px 左右30px
    padding: 5px 30px;
    //让文字居中
    text-align: center;
  }
  //属性选择器
  [type="text"] {
    width: 50px;
    text-align: center;
  }
}
</style>

在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值