Angular实现购物车计算示例代码


Posted in Javascript onFebruary 21, 2017

使用AngularJS实现一个简单的购物车,主要感受强大的双向绑定和只关注对象不关注界面特性。

先看看界面:

Angular实现购物车计算示例代码

点击+-操作和删除:

Angular实现购物车计算示例代码

这些全部只需要操作数据源就行,不需要关注界面。

实现过程:

一、使用任何语言创建一个服务端:

public class ShoppingCar
  {
    public string Title { get; set; }
    public decimal UnitPrice { get; set; }
    public int Count { get; set; }
  }
public ActionResult GetCar()
    {
      List<ShoppingCar> cars = new List<ShoppingCar>
      {
        new ShoppingCar { Title="苹果",Count=1,UnitPrice=2.5m},
        new ShoppingCar { Title="香蕉",Count=3,UnitPrice=1.5m},
        new ShoppingCar { Title="苦瓜",Count=1,UnitPrice=3.5m},
        new ShoppingCar { Title="黄瓜",Count=3,UnitPrice=2.2m}
      };
      return Json(cars,JsonRequestBehavior.AllowGet);
    }

    public ActionResult AddCar(List<ShoppingCar> car)
    {
      return Json("ok", JsonRequestBehavior.AllowGet);
    }

二、前台实现:

<div ng-app="DemoApp" ng-controller='CartController'>
    <table class="table table-striped">
      <thead>
        <tr>
          <td>标题</td>
          <td>单价</td>
          <td>数量</td>
          <td>小计</td>
          <td>删除</td>
        </tr>
      </thead>
      <tbody>
        <tr ng-repeat="item in ShoppingCar">
          <td>{{item.Title}}</td>
          <td>{{item.UnitPrice}}</td>
          <td>
            <input type="text" ng-cloak ng-model="item.Count" style="width:50px;text-align:center;">
            <button my-adds ng-click="UpdateCar(item.Title,1)" ng-class="{cursors:true}">+</button>
            <button my-minus ng-click="UpdateCar(item.Title,-1)" ng-class="{cursors:true}">-</button>
          </td>
          <td>{{item.Count*item.UnitPrice | number:2}}</td>
          <td><button my-minus ng-click="UpdateCar(item.Title,-100)" ng-class="{cursors:true}">删</button></td>
        </tr>
      </tbody>
    </table>
    <p ng-init=0>总价格:{{ total | number:2}}</p>
    <button type="button" ng-click="submit()">提交</button>
  </div>

三、Angular部分
 

var app = angular.module('DemoApp', []);

  app.controller('CartController', ['$scope', '$http', function ($scope, $http) {
    $scope.ShoppingCar = {}
    var GetCar = function () {
      $http.get('/Employee/GetCar')
      .success(function (response) {
        $scope.ShoppingCar = response;
        GetTotal();
      });
    }
    $scope.total = 0;
    var GetTotal = function () {
      for (var i = 0; i < $scope.ShoppingCar.length; i++) {
        var item = $scope.ShoppingCar[i];
        $scope.total += item.Count * item.UnitPrice;
      }
    }

    $scope.UpdateCar = function (title, count) {
      for (var i = 0; i < $scope.ShoppingCar.length; i++) {
        var item = $scope.ShoppingCar[i];
        if (item.Title == title) {
          item.Count = item.Count + count;//这里可以增加上下限制
          if (item.Count < 0) {
            $scope.ShoppingCar.splice(i, 1);
          }
        }
      }
      GetTotal();
    }
    $scope.submit = function () {
      $http.post('/Employee/AddCar', $scope.ShoppingCar)
          .success(function (response) {
          alert(response);
      });
    }
    GetCar();
  }]);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 数组学习资料收集
Apr 11 Javascript
extjs grid设置某列背景颜色和字体颜色的方法
Sep 03 Javascript
为什么JS中eval处理JSON数据要加括号
Apr 13 Javascript
前端程序员必须知道的高性能Javascript知识
Aug 24 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
Sep 21 Javascript
weUI应用之JS常用信息提示弹层的封装
Nov 21 Javascript
jQuery使用Layer弹出层插件闪退问题
Dec 22 Javascript
ES6新特性:使用export和import实现模块化详解
Jul 31 Javascript
微信小程序实现点赞、取消点赞功能
Nov 02 Javascript
基于layui轮播图满屏是高度自适应的解决方法
Sep 16 Javascript
vue调用语音播放的方法
Sep 27 Javascript
Array.filter中如何正确使用Async
Nov 04 Javascript
原生js实现倒计时--2018
Feb 21 #Javascript
vue-router:嵌套路由的使用方法
Feb 21 #Javascript
JavaScript中创建对象的7种模式详解
Feb 21 #Javascript
vue-router路由简单案例介绍
Feb 21 #Javascript
微信小程序 基础组件与导航组件详细介绍
Feb 21 #Javascript
微信小程序 UI与容器组件总结
Feb 21 #Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
Feb 21 #Javascript
You might like
需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
2008/05/26 PHP
PHP 时间日期操作实战
2011/08/26 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
thinkphp3.2实现上传图片的控制器方法
2016/04/28 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
jQuery之按钮组件的深入解析
2013/06/19 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
JS实现滑动门效果的方法详解
2016/12/19 Javascript
Bootstrap笔记—折叠实例代码
2017/03/13 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
Python2与Python3的区别实例分析
2019/04/11 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
python opencv实现简易画图板
2020/08/27 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
HTML5 canvas基本绘图之文字渲染
2016/06/27 HTML / CSS
军训鉴定表自我鉴定
2014/02/13 职场文书
机关保密承诺书
2014/06/03 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
法人代表证明书范本
2015/06/18 职场文书
世界名著读书笔记
2015/06/25 职场文书
中学后勤工作总结2015
2015/07/22 职场文书
高中英语教学反思范文
2016/03/02 职场文书
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python
Python使用永中文档转换服务
2022/05/06 Python