鸿蒙ArkTS小案例-购物车

最近用鸿蒙的ArkTS做了一个购物车的小案例,在这里分享一下,该购物车已实现如下功能:

1. 购物车商品数量支持1个或者多个

2. 勾选1个或者多个商品后,底部可以动态计算出购买总数量和总价格

3. 同时,可以对购买商品的数量进行增加和减少,也可以实时算出购买总数量和总价格

3. 支持全选,也可以实时算出购买总数量和总价格

最终成果页面如下所示:

页面源码如下:

import { cartData, CartItem, retSumPrice } from '../../model/Cart';
import { CartItemView } from '../../viewmodel/CartItemView';

/**
 * Author: 波波老师(weixin:javabobo0513)
 * Desc: 购物车页面
 */
@Entry
@Component
struct ShopCarPlus {
  @State sumCount: number = 0; //商品总数量
  @State sumPrice: number = 0; //商品总价格
  @State arrCartData: Array<CartItem> = cartData.getCartData(); //购物车商品数据

  build() {
    Column() {
      Text('购物车')
        .fontSize(25)
        .fontWeight(FontWeight.Bold)
        .height(50)
      List() {
        ListItem() {
          Column({ space: 10 }) {
            ForEach(this.arrCartData, (cart: CartItem) => {
              CartItemView({
                cartItem: cart
              });
            })
          }
          .width('96%')
          .justifyContent(FlexAlign.Start)
        }
      }
      .alignListItem(ListItemAlign.Center) //设置子元素居中显示
      .height('85%') //设置List高度

      // 占位符,用于在布局中创建空间
      Blank()

      // 结算行的布局
      Flex({
        direction: FlexDirection.Row,
        wrap: FlexWrap.NoWrap,
        justifyContent: FlexAlign.Center,
        alignItems: ItemAlign.Center
      }) {
        // 全选复选框和文本
        Row({ space: 5 }) {
          CheckboxGroup({ group: 'cartGroup' })
            .width(16)
            //onChange:CheckboxGroup的选中状态或群组内的Checkbox的选中状态发生变化时,触发回调
            .onChange(result => {
              this.sumCount = result.name.length;
              console.log(JSON.stringify(result))
              //result.name:群组内,被选中的 Checkbox 的name名称
              this.sumPrice = retSumPrice(this.arrCartData, result.name)
            })
          Text('全选')
            .fontSize(16)
        }
        .width('22%')

        // 结算信息
        Row() {
          // 显示已选商品数量和总金额
          Text(`已选 ${this.sumCount} 件`)
            .fontColor(Color.Gray)
            .fontSize(14)
          Text('合计: ')
            .fontSize(14)
          Text(`¥ ${this.sumPrice.toFixed(2)}`)
            .fontColor('#e6f51905')
            .fontSize(20)
        }
        .layoutWeight(1)

        // 结算按钮
        Button('结算')
          .width(70)
          .height(40)
          .backgroundColor('#ffff4801')
      }
      .padding(5)
      .height(60)
      .width('100%')
      .backgroundColor(Color.White)
      .borderRadius({
        topLeft: 25,
        topRight: 25
      })

    }
    .backgroundColor($r('app.color.page_bg')) // 页面背景颜色
    .width('100%')
    .height('100%')
  }
}

源码中涉及到的商品图片可以自行替换,希望对大家有所帮助

### ArkTS 开发案例:美团购物车功能鸿蒙应用开发中,使用ArkTS可以构建高效且响应式的用户界面。对于美团购物车这一具体应用场景而言,开发者可以通过一系列技术手段来优化用户体验。 #### 使用进阶运算符与状态管理提升性能 为了提高购物车页面的操作流畅度和数据同步效率,在编写代码时采用了多种高级编程技巧[^2]: - **绑定表达式**:允许更灵活的数据绑定方式; - **三元运算符**:简化条件判断逻辑; - **解构赋值**:方便获取对象内部属性; 这些特性不仅让代码更加简洁易读,同时也增强了程序运行时的表现力。 #### 动态更新商品列表并保持视图一致性 当用户向购物车内添加新物品或修改已有项的数量时,系统能够即时反映最新变化而不必重新加载整个页面。这得益于良好的状态管理模式设计: ```typescript // 定义初始状态 const cartItems = reactive([ { id: 'item1', name: '苹果', price: 3, count: 1 }, ]); function updateItemCount(itemId: string, newCount: number) { const itemToUpdate = cartItems.find(item => item.id === itemId); if (itemToUpdate) { itemToUpdate.count = newCount; } } ``` 上述示例展示了如何利用`reactive()`函数创建可观察的对象数组,并通过简单的遍历操作完成特定项目的数量更改。每当调用`updateItemCount()`方法后,关联UI组件都会自动刷新显示最新的计数值。 #### 结合实际业务需求定制化解决方案 针对不同类型的电商平台可能存在的特殊要求(如限时抢购、满减优惠等),还可以进一步扩展此框架的功能集。例如引入定时器机制处理秒杀活动倒计时效果,或是集成第三方支付SDK支持多样化的结算渠道。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学生波波

感谢您的厚爱与支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值