实现购物车结算功能:批量和全部删除,全选和反选,单价和总价,数量增减,页面隐藏和显示

本文介绍了一个基于AngularJS实现的购物车案例,演示了如何利用AngularJS特性完成商品信息的展示与交互,包括商品数量增减、总价计算、批量及全部删除等功能。

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

需求:

要求:技术要求(html+css+angularjs)

1.  完成页面布局,如图1.1button按钮可以用普通按钮)

2.Ø声明数据对象,初始化商品信息,数据自拟且不低于四条

3.  用ng-repaet指令将对象遍历并渲染到页面中

4.Ø点击”+”按钮输入框中的数量加1,同时可以计算出商品小计和购物车总价。同理,当点击”-”按钮时输入框中的数量减1,商品小计和购物车总价都会改变。在输入框中手动输入数量值,商品小计和购物车总价动态改变。

5. 使用AngularJS的过滤器在商品价格、商品小计、购物车总价前加”¥:”。

6.   当商品数量为1,用户点击”-”操作时,弹出对话框,询问用户是否删除该商品。如图1.2 当用户点击”确认”时删除该条商品信息,当用户点击”取消”时 商品恢复原来数量。

7. 用户点击第一个checkbox代表全选,全选商品后点击删除选中商品,选中商品被删除, 若购物车商品被全部删除后,展示如图1.3


效果图:

图1.1



图1.2



    图1.3

代码:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>实现购物车结算功能:批量/全部删除,全选/反选,单价/总价,数量增减,页面隐藏/显示</title>
    <style type="text/css">
       .mouse_color{
           background-color: #cccccc;
       }
        .num{
            width: 50px;
        }
        a{
            text-decoration: none;
        }
       #btn1,#btn2{
            color:white;
            width: 100px;
            float: right;
            border: solid red;
            margin-right: 88px;
            background-color: #ff3b30;
        }
    </style>
    <script src="../js/jquery-2.1.0.js"></script>
    <script src="../js/angular.js"></script>
    <script type="text/javascript">
        $(function () {
            // 鼠标移到行的颜色:光标在表格上移动,当前行变色;( mousemove或mouseover )
            $("#tab tr").mouseover(function () {
                $(this).addClass("mouse_color");
            });
            // 鼠标移出行的颜色:离开当前行,颜色恢复
            $("#tab tr").mouseout(function () {
                $(this).removeClass("mouse_color");
            });
        });
    </script>
    <script>
        var app = angular.module("myApp",[]);
        app.controller("myCtrl",function ($scope) {
            //1. 声明数据对象,初始化商品信息,数据自拟且不低于四条
            $scope.Products = [
                {name:"qq",price:12.90,number:1,totalPrice:12.90,state:false},
                {name:"wx",price:23.90,number:1,totalPrice:23.90,state:false},
                {name:"cn",price:99.90,number:1,totalPrice:99.90,state:false},
                {name:"us",price:2.90,number:1,totalPrice:2.90,state:false},
                {name:"jp",price:0.90,number:1,totalPrice:0.90,state:false}
            ];

            //2. 减少数量函数
            $scope.less = function (index) {
                if($scope.Products[index].number > 1){
                    $scope.Products[index].number--;
                }else {
                    //跳转到删除按钮事件处
                    $scope.remove(index);
                }
            }
            //3. 添加数量函数
            $scope.add = function (index) {
                $scope.Products[index].number++;
            }

            //4. 所有商品总价函数
            $scope.AlltotalPrice = function () {
                var allPrice = 0;
                for(var i = 0;i<$scope.Products.length;i++){
                    allPrice +=  $scope.Products[i].number * $scope.Products[i].price;
                    allPrice.toFixed(2);        //保留两位小数
                }
                return allPrice.toFixed(2);;
            }

            //5. 输入框输入负数或其它除数字外的内容时,输入框内容要变为1
            $scope.change = function (index) {
                if($scope.Products[index].number >= 1){
                }else {
                    $scope.Products[index].number = 1;
                }
            }

            //6.购买总数量函数
            $scope.numAll = function () {
                var numAlls = 0;
                for(var i = 0;i<$scope.Products.length;i++){
                    numAlls += $scope.Products[i].number;
                }
                return numAlls;
            }

            //7. 点击删除按钮操作,弹出对话框,询问用户是否删除该商品。
            $scope.remove = function (index) {
                if(confirm("您是否要将该商品移除购物车?")){
                    $scope.Products.splice(index,1);
                }
            }

            //8.点击 清空购物车 按钮,清空商品信息
            $scope.clear = function () {
                if(confirm("您是否准备清空购物车?")){
                    $scope.Products = [];
                }
            }

            //9. 点击批量删除按钮的函数:用户没有选中任意复选框时点击批量删除按钮提示用户先进行选中要删除的商品信息
            $scope.delSelect = function () {
                var ProductsNames = [];  //定义空数组,保存选中项的name
                //根据下标遍历数据源,把选中项的名字添加到数组中。
                for(index in $scope.Products){
                    //判断选项是否为选中的的状态?
                    if($scope.Products[index].state == true){
                        ProductsNames.push($scope.Products[index].name);
                    }
                }

                //遍历含有选中项name属性的数组。有多少个被选中,数据源就会被遍历多少遍。
                if(ProductsNames.length >0 ){
                    if(confirm("您是否要将选择的商品移除购物车?")){
                        for(i in ProductsNames){
                            var name = ProductsNames[i];
                            //对比选中项的名字在数组中的角标,根据角标删除当前对象,删一个数据源少一个。
                            for(y in $scope.Products){
                                if (name == $scope.Products[y].name){
                                    $scope.Products.splice(y,1);
                                }
                            }
                        }
                    }
                }else {
                    alert("请先选择要移除的商品项");
                }
            }

            //10. 全选复选按钮 的点击事件
            $scope.selectAll = false;
            $scope.selectAllFun = function () {
                //如果全选按钮为true时,就把数组的state状态变为true
                if($scope.selectAll){
                    for(index in $scope.Products){
                        $scope.Products[index].state = true;
                    }
                }else {
                    for(index in $scope.Products){
                        $scope.Products[index].state = false;
                    }
                }

            }
            //单个复选框按钮的点击事件:根据点击的单个复选框按钮的下标的state 检测内容是否全选
            $scope.checkSelect = function (index) {
                var temp = 0;
                if($scope.Products[index].state == true){
                    temp++;
                }else {
                    temp--;
                }

                //定义的变量大小等于数组的长度,代表内容全选,表示全选按钮为true
                if(temp == $scope.Products.length  ){
                    $scope.selectAll = true;
                }else {
                    $scope.selectAll = false;
                }

                //定义标志位checkState,默认为false
                var checkState = false;
                for(i in $scope.Products){
                    if($scope.Products[i].state == true){
                    }else {
                        //数据源中的标志位变量state不是全部等于true时,标志位checkState才为true
                        checkState = true;
                    }
                }
                if(checkState){
                    //标志位checkState为true时,全选按钮就为false
                    $scope.selectAll = false;
                }else {
                    $scope.selectAll = true;
                }
            }

            //11. 判断数据源的长度:长度为0时,即购物车为空,页面就提示:您的购物车为空,去逛商场
            $scope.showContent = function () {
                if($scope.Products.length > 0){
                    return false;
                }else {
                    return true;
                }
            }
        });
    </script>
</head>

<body ng-app="myApp" ng-controller="myCtrl">
<h2>我的购物车</h2>
<hr style="size: 1px;background-color: #F5F5F5;width: 100%;">   <br>
    <button ng-click="delSelect()" id="btn1" > 批量删除 </button>
    <button ng-click="clear()" id="btn2" > 清空购物车 </button>   <br><br>

<center>
    <table id="tab" ng-hide="showContent()" border="1 solid #F5F5F5;" cellspacing="0" cellpadding="1" width="888" height="333">
        <thead>
            <tr align="left">
                <!--    全选复选按钮    -->
                <th><input type="checkbox" ng-model="selectAll" ng-click="selectAllFun()"></th>
                <th>name</th>
                <th>price</th>
                <th>number</th>
                <th>totalPrice</th>
                <th>option</th>
            </tr>
        </thead>
        <tbody>
            <!--    用ng-repaet指令将对象遍历并渲染到页面中    -->
            <!--    使用AngularJS的过滤器在商品价格、商品小计、购物车总价前加”¥:”   -->
            <tr ng-repeat="goods in Products">
                <!--    单个 复选按钮    -->
                <th align="left"><input type="checkbox" ng-model="goods.state"  ng-click="checkSelect($index)"></th>
                <td>{{goods.name}}</td>
                <td>¥:{{goods.price.toFixed(2)}}</td>
                <td>
                    <!--    点击”+”按钮输入框中的数量加1,同时可以计算出商品小计和购物车总价。 -->
                    <button ng-click="less($index)" style="background-color: #007aff;color: white;border: solid #007aff;">-</button>

                    <input type="text" class="num" ng-model="goods.number" ng-change="change($index)">

                    <!--    当点击”-”按钮时输入框中的数量减1,商品小计和购物车总价都会改变。  -->
                    <button ng-click="add($index)" style="background-color: #007aff;color: white;border: solid #007aff;">+</button> </td>
                </td>
                <td>¥:{{(goods.price * goods.number).toFixed(2)}}</td>
                <td><button ng-click="remove($index)" style="background-color: #007aff;color: white;border: solid #007aff;">删除</button></td>
            </tr>
        </tbody>
        <tfoot>
            <tr>
                <td colspan="6">
                    购买数量:<span>{{numAll()}}</span> &nbsp;&nbsp;
                    <!--    显示¥符号也可以直接使用  ¥  如<td colspan="6">总价为:¥:<span ng-bind="AlltotalPrice()"></span></td>    -->
                    总价为:<span ng-bind="AlltotalPrice() | currency:'¥'"></span>
                </td>
            </tr>
        </tfoot>
    </table>

    <!--    购物车为空时选择显示的内容   -->
    <p ng-show="showContent()">您的购物车为空,<a href="https://world.taobao.com/">去逛商场</a></p>
</center>
</body>
</html>

# 生鲜集市小程序商城开发模板 ## 一、项目概述 “生鲜集市”小程序商城旨在为用户提供便捷的生鲜采购平台,涵盖丰富的生鲜品类,确保新鲜、优质的商品供应。通过简洁易用的界面设计高效的购物流程,提升用户购物体验,同时为商家提供全面的订单管理数据分析功能,助力业务增长。 ## 二、功能模块 ### (一)用户端 1. **商品展示**:以图文形式展示各类生鲜商品,包括水果、蔬菜、肉类、海鲜等,按分类浏览,支持搜索功能,方便用户查找所需商品。提供商品详情页,展示商品规格、产地、保质期、营养成分等信息。 2. **购物车**:用户可将心仪商品加入购物车,在购物车中调整商品数量择商品进行结算,支持批量删除商品。显示购物车商品总价结算时自动计算运费(若有)。 3. **订单管理**:用户可查看所有订单,包括待付款、待发货、运输中、已完成、已取消等状态。对未付款订单进行支付操作,对已发货订单查看物流信息,对已完成订单进行评价。 4. **个人中心**:展示用户基本信息,如头像、昵称、手机号,支持修改个人信息。显示用户积分、优惠券、收藏的商品店铺。提供收货地址管理功能,包括添加、修改、删除地址,设置默认收货地址。支持账户安全设置,如修改密码、绑定第三方账号。 ### (二)商家端 1. **商品管理**:添加、编辑、删除商品信息,包括商品名称、价格、库存、图片、详情描述等。设置商品分类、标签,便于用户筛。实时查看商品销量、库存预警,及时补货或调整商品策略。 2. **订单管理**:查看所有订单详情,包括订单编号、下单时间、用户信息、商品信息、订单状态等。对订单进行发货操作,填写物流单号;处理售后订单,如退款、换货申请。 3. **数据统计**:分析商品销售数据,如销量、销售额、订单量等,按日、周、月查看趋势图表。查看用户行为数据,如访问量、浏览量、购买转化率,优化商品展示营销策略。 ### (三)后台管理 1. **用户管理**:查看所有用户信息,包括基本信息、账户状态、消费记录等。对违规用户进行封禁、限制操作,保障平台秩序。 2. **商品管理**:审核商家提交的商品信息,确保商品合规、质量达标。对商品进行上下架管理,维护平台商品展示。 3. **订单管理**:监控平台所有订单,处理异常订单,如支付异常、物流异常等。统计订单数据,为运营决策提供支持。 4. **数据统计分析**:综合分析平台数据,包括用户增长、商品销售、订单趋势等,生成报表图表。通过数据挖掘,发现潜在业务机会,优化平台运营策略。 ## 三、页面设计 ### (一)首页 1. **顶部导航栏**:展示小程序名称、搜索框、用户头像(点击可进入个人中心)。 2. **轮播图**:展示热门商品、促销活动等,吸引用户注意力。 3. **商品分类导航**:以图标文字形式展示各类生鲜商品分类,方便用户快速进入相应分类页面。 4. **热门商品推荐**:展示热门、畅销的生鲜商品,包括商品图片、名称、价格、销量等信息,吸引用户购买。 5. **底部导航栏**:包含“首页”“购物车”“订单”“我的”四个功能模块入口。 ### (二)商品分类页 1. **分类列表**:以列表形式展示所有商品分类,每个分类展示分类名称、图标分类下商品数量。 2. **商品列表**:进入具体分类后,展示该分类下的商品列表,包括商品图片、名称、价格、销量等信息,支持按销量、价格等排序。 ### (三)商品详情页 1. **商品图片轮播**:展示商品多角度高清图片,让用户全面了解商品外观。 2. **商品基本信息**:显示商品名称、价格、规格、产地、保质期等信息。 3. **商品详情描述**:详细介绍商品的特点、营养价值、食用方法等。 4. **用户评价**:展示其他用户对该商品的评价评分,帮助用户了解商品口碑。 5. **购买按钮**:包括“加入购物车”“立即购买”按钮,方便用户操作。 ### (四)购物车页 1. **购物车列表**:展示购物车中所有商品,包括商品图片、名称、规格、数量单价总价等信息。 2. **商品操作按钮**:支持对商品进行数量增减删除操作。 3. **全选/按钮**:方便用户快速择或取消购物车中的所有商品。 4. **结算按钮**:显示购物车商品总价,点击可进入结算页面。 ### (五)订单页 1. **订单列表**:按订单状态展示所有订单,包括订单编号、下单时间、订单金额、订单状态等信息。 2. **订单详情按钮**:点击可查看订单详细信息,包括商品信息、收货地址、支付方式等。 ### (六)个人中心页 1. **个人信息展示区**:展示用户头像、昵称、手机号,提供“编辑资料”按钮。 2. **功能模块入口**:包括“我的订单”“我的
03-08
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值