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模式的双向绑定数据,所以当你改变其中变量的时候其他地方凡是用到了此变量地方都会跟着变。

  • 相关阅读:
    css的三种特性
    css选择器
    margin:0 auto 与 text-align:center 的区别
    JS如何实现点击页面内任意的链接均加参数跳转
    css和js带参数(形如.css?v=与.js?v= 或 .css?version=与.js?version=)
    移动端页面前端设计随笔整理
    理解:Before和:After伪元素
    时下流行的css3页面纵向滑动效果
    webapp网页调试工具Chrome Devtools
    做手机web半年遇到的问题及解决方法
  • 原文地址:https://www.cnblogs.com/yk123/p/6782088.html
Copyright © 2011-2022 走看看