zoukankan      html  css  js  c++  java
  • angularJS1笔记-(3)-购物车增删改查练习

    html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="../../vendor/bootstrap3/css/bootstrap.min.css">
    </head>
    <body ng-app="myApp">
    <div class="container">
        <table class="table" ng-controller="firstController" ng-show="cart.length">
            <thead>
            <tr>
                <th>产品编号</th>
                <th>产品名字</th>
                <th>购买数量</th>
                <th>产品单价</th>
                <th>产品总价</th>
                <th>操作</th>
            </tr>
            </thead>
            <tbody>
            <tr ng-repeat="item in cart">
                <td>{{item.id}}</td>
                <td>{{item.name}}</td>
                <td>
                    <button type="button" ng-click="reduce(item.id)" class="btn btn-primary">-</button>
                    <input type="text" value="item.quantity" ng-model="item.quantity"/>
                    <button type="button" ng-click="add(item.id)" class="btn btn-primary">+</button>
                </td>
                <td>{{item.price}}</td>
                <td>{{item.price*item.quantity}}</td>
                <td>
                    <button type="button" class="btn btn-primary" ng-click="remove(item.id)">移除</button>
                </td>
            </tr>
            <tr>
                <td>
                    总价:
                </td>
                <td>
                    {{totalPrice()}}
                </td>
                <td>
                    总购买数量:
                </td>
                <td>
                    {{totalCount()}}
                </td>
                <td colspan="2">
                    <button type="button" class="btn btn-primary" ng-click="cart = {}">清空购物车</button>
                </td>
            </tr>
            </tbody>
        </table>
        <p ng-show="!cart.length">您的购物车为空</p>
    </div>
    <script type="text/javascript" src="../../vendor/angular/angularJs.js"></script>
    <script type="text/javascript" src="app/index.js"></script>
    </body>
    </html>
    

    js:

    angular.module('myApp', []).controller('firstController', function ($scope) {
        $scope.cart = [
            {
                id: 1000,
                name: 'iphone7p',
                quantity: 2,
                price: 4999
            },
            {
                id: 1001,
                name: 'iphone4p',
                quantity: 2,
                price: 999
            },
            {
                id: 1002,
                name: 'iphone6p',
                quantity: 6,
                price: 3999
            },
            {
                id: 1003,
                name: 'iphoneSE',
                quantity: 20,
                price: 11999
            }
        ];
    
        //计算总价
        $scope.totalPrice = function () {
            var totalPrice = 0;
            angular.forEach($scope.cart, function (item) {
                totalPrice += parseInt(item.quantity) * item.price;
            })
            return totalPrice;
        }
        //计算总购买数量
        $scope.totalCount = function () {
            var totalCount = 0;
            angular.forEach($scope.cart, function (item) {
                totalCount += parseInt(item.quantity);
            })
            return totalCount;
        }
        //移除
        $scope.remove = function (id) {
            var index = -1;
            angular.forEach($scope.cart, function (item, key) {
                if (item.id == id) {
                    index = key;
                }
            })
            if (index != -1) {
                $scope.cart.splice(index, 1);
            }
        }
    
        //找索引 因为angular的机制是通过索引来删除
        var findIndex = function (id) {
            var index = -1;
            angular.forEach($scope.cart, function (item, key) {
                if (item.id == id) {
                    index = key;
                    return;
                }
            });
            return index;
        }
    
        //添加
        $scope.add = function (id) {
            var index = findIndex(id);
            if (index != -1) {
    
                ++$scope.cart[index].quantity;
            }
        }
        //删除
        $scope.reduce = function (id) {
    
            var index = findIndex(id);
    
            if (index != -1) {
                var item = $scope.cart[index];
                if(item.quantity>1){
                    --item.quantity;
                }else {
                    var returnKey = confirm('从购物车中删除该商品吗?')
                    if (returnKey) {
                        $scope.cart.splice(index, 1);
                    }
                }
            }
        }
    
        $scope.$watch('cart',function (newValue,oldValue) {
            angular.forEach(newValue,function (item, key) {
                if(item.quantity<1){
                    var returnKey = confirm('是否从购物车内删除该产品?');
                    if(returnKey){
                        $scope.cart.splice(key, 1);
                    }else{
                        item.quantity = oldValue[key].quantity;
                    }
                }
            })
        },true);
    });
    

     最终结果:

    因为angular是MVVM模式的双向绑定数据,所以当你改变其中变量的时候其他地方凡是用到了此变量地方都会跟着变。

  • 相关阅读:
    200. Number of Islands 200.岛屿数(可以形状一样)
    695. Max Area of Island最大岛屿面积
    springboot如何在项目启动时初始化资源
    springboot之集成Memcached
    springboot之spring-boot-admin对springboot服务进行监控
    springboot之集成FastDFS
    springboot之上传文件
    springboot之整合shiro-登录认证和权限管理
    springboot 如何测试打包部署
    springboot之Mongo
  • 原文地址:https://www.cnblogs.com/yk123/p/6782088.html
Copyright © 2011-2022 走看看