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 相关文章推荐
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
Nov 30 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
Mar 08 Javascript
BootStrap和jQuery相结合实现可编辑表格
Apr 21 Javascript
javascript学习指南之回调问题
Apr 23 Javascript
JavaScipt选取文档元素的方法(推荐)
Aug 05 Javascript
五步轻松实现zTree的使用
Nov 01 Javascript
解决vue attr取不到属性值的问题
Sep 18 Javascript
javascript中数组的常用算法深入分析
Mar 12 Javascript
微信小程序封装的HTTP请求示例【附升级版】
May 11 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
Aug 06 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
Aug 31 Javascript
H5+css3+js搭建带验证码的登录页面
Oct 11 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模板类代码
2008/09/07 PHP
PHP 获取目录下的图片并随机显示的代码
2009/12/28 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
PHP实现搜索时记住状态的方法示例
2018/05/11 PHP
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
JS学习之一个简易的日历控件
2010/03/24 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
JavaScript异步加载问题总结
2018/02/17 Javascript
layui select获取自定义属性方法
2018/08/15 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
2019/02/21 Javascript
微信小程序实现的五星评价功能示例
2019/04/25 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
[02:47]2018年度DOTA2最佳辅助位选手4号位-完美盛典
2018/12/17 DOTA
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
python实现RSA加密(解密)算法
2016/02/17 Python
python3实现ftp服务功能(客户端)
2017/03/24 Python
django 删除数据库表后重新同步的方法
2018/05/27 Python
Python figure参数及subplot子图绘制代码
2020/04/18 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
HTML5超文本标记语言的实现方法
2020/09/24 HTML / CSS
Lands’ End英国官方网站:高质量男女服装
2017/10/07 全球购物
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
学生生病请假条范文
2014/02/16 职场文书
工地质量标语
2014/06/12 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
SpringBoot 集成Redis 过程
2021/06/02 Redis
Python基础之条件语句详解
2021/06/16 Python