angular和BootStrap3实现购物车功能


Posted in Javascript onJanuary 25, 2017

一、页面搭建

1、html结构

采用BootStrap3来快速创建一个购物车表单样式。
主要功能:
A:列表数据所示
B:增加删除端口
C:清空购物车
D:商品数量的增减
E:动态计算商品价格以及总价

<!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
 <meta charset="UTF-8">
 <title>购物车</title>
 <link rel="stylesheet" href="../vendor/bootstrap/css/bootstrap.css">
 <script src="../vendor/angular.js"></script>
 <script src="car-controller.js"></script>
</head>
<body>
 <div class="table-responsive container" ng-controller="CarCtrl">

  <table class="table " ng-show="data.length">
   <thead>
   <tr><th>产品编号</th><th>产品名字</th><th>购买数量</th><th>产品单价</th><th>产品总价</th><th>操作</th></tr>
   </thead>
   <tr ng-repeat="value in data">
    <td>{{value.id}}</td>
    <td>{{value.name}}</td>
    <td>
     <button class="btn btn-primary" ng-click="reduce(value.id)" >-</button>
     <input type="number" name="num" ng-model="value.quantity" id="num">
     <button class="btn btn-primary" ng-click="add(value.id)">+</button>
    </td>
    <td>{{value.price}}</td>
    <td>{{value.price*value.quantity}}</td>
    <td>
     <button class="btn btn-danger" ng-click="removeItem(value.id)">移除</button>
    </td>
   </tr>
   <tfoot>
   <tr>
    <td></td>
    <td>总购买数量 </td>
    <td>{{totalQuantity()}}</td>
    <td>总购买价</td>
    <td>{{totalPrice()}}</td>
    <td>
     <button class="btn btn-danger" ng-click="data=null">清空购物车</button>
    </td>
   </tr>
   </tfoot>
  </table>
  <p ng-show="!data.length">您的购物车为空</p>
 </div>
</body>
</html>

2、js逻辑部分

1 注册应用app
2 定义controller以即数据
3 在html中绑定应用以及controller,实现数据渲染

var app=angular.module("app",[]);
 var carController=function($scope){
  $scope.data=[
   {
    id:1,
    name:'HuaWei',
    quantity:'2',
    price:4300
   },
   {
    id:2,
    name:'iphone7',
    quantity:'3',
    price:6300
   },
   {
    id:3,
    name:'XiaoMi',
    quantity:'3',
    price:2800
   },
   {
    id:4,
    name:'Oppo',
    quantity:'3',
    price:2100
   },
   {
    id:5,
    name:'Vivo',
    quantity:'3',
    price:2100
   }
  ]
 }

注意:

1、在html中通过ng-app注册应用,ng-controller来绑定控制器作用域,ng-repeat遍历商品数据data
2、在js中,angular提供了angular.forEach(obj,fn(item){})方法来遍历angular的数据,并可以在fn中对数据做进一步处理。此处计算总价便通过此方法

二、业务逻辑

1、总价计算操作

/*
   * 计算总价
   * @method: angular.forEach()
   * @param: 1. $scope.obj:要遍历的scope上的数据
   *   2. function(item){} 回调,在函数内部处理遍历的数据
   * */
  $scope.totalPrice=function(){
   var total=0;
   angular.forEach($scope.data,function(item){
    total+=item.quantity*item.price;
   })
   return total
  }
   /*计算总数量*/
  $scope.totalQuantity=function(){
   var total=0;
   angular.forEach($scope.data,function(item){
    total+=item.quantity;
   })
   return total
  }

说明:

1)、使用angular提供的forEach方法遍历当前数据,从而计算出所有数据的总价以及总数量

2、删除条目

/*移除某项
  * @param:传入当前项的id作为参数,以确定移除哪一项
  * */
  $scope.removeItem=function(id){
   var index=findIndex();
   $scope.data.splice(index,1);
  }

说明:

1)、为代码利用,所以抽取出来findIndex()方法用于确定当前操作的项,代码如下:

/*查找当前操作的元素的位置*/
  function findIndex(id){
   var index=-1;
   angular.forEach($scope.data,function(value,key,obj){
    if(value.id===id){
     index=key;
     return index;
    }
   })
   return index;
  }

3.清空操作

在页面中,直接利用表达式,但data=null完成数据的清空操作

<tr>
 <td></td>
 <td>总购买数量 </td>
 <td>{{totalQuantity()}}</td>
 <td>总购买价</td>
 <td>{{totalPrice()}}</td>
 <td>
  <button class="btn btn-danger" ng-click="data=null">清空购物车</button>
 </td>
</tr>

4. 增加和删除商品数量

/*增加商品数量*/
  $scope.add=function(id){
   var index=findIndex($scope,id),
    item=$scope.data[index];
   item.quantity++;
  }
  /*减少商品数量
  * @description:
  * 减少当前项的数量,当仅剩一件时弹出对话框确认是否清空。是则调用removeItem方法清除当前项
  * */
  $scope.reduce=function(id){
   var index=findIndex($scope,id),
    item=$scope.data[index];
   if(item.quantity>1){ //判断当前项是否还能再减
    item.quantity--;
   }else{
    var makesure=confirm('确定要清空当前项吗??');
    if(makesure){
     $scope.removeItem(id)
    }
   }
  }

总结:
此demo主要利用了angular的数据双向绑定特性,从而大大的简化了操作。
关键点:

1)、angular.forEach(obj,fn(value,key,obj)) 迭代器
2)、ng-click指令绑定点击事件。使用ng-click会自动触发angular的脏检查机制从而实时的更新视图
3)、ng-repeat指令遍历数据,渲染页面
4)、ng-show指令:通过其值来判断是否显示(原理是给元素加nghide类名)

angular和BootStrap3实现购物车功能

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

Javascript 相关文章推荐
JavaScript中的Screen屏幕对象
Jan 16 Javascript
JavaScript判断用户是否对表单进行了修改的方法
Mar 18 Javascript
jQuery控制Div拖拽效果完整实例分析
Apr 15 Javascript
写给小白的JavaScript引擎指南
Dec 04 Javascript
jQuery无刷新上传之uploadify3.1简单使用
Jun 18 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
Jun 27 Javascript
基于Bootstrap实现城市三级联动
Nov 23 Javascript
Webpack打包字体font-awesome的方法示例
Apr 26 Javascript
vue项目打包部署_nginx代理访问方法详解
Sep 20 Javascript
JS 封装父页面子页面交互接口的实例代码
Jun 25 Javascript
vue倒计时刷新页面不会从头开始的解决方法
Mar 03 Javascript
vue实现滑动解锁功能
Mar 03 Vue.js
jquery 实现复选框的全选操作实例代码
Jan 24 #Javascript
谈谈JavaScript数组常用方法总结
Jan 24 #Javascript
js实现日历的简单算法
Jan 24 #Javascript
JSON键值对序列化和反序列化解析
Jan 24 #Javascript
js自制图片放大镜功能
Jan 24 #Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
Jan 24 #Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
Jan 24 #Javascript
You might like
CodeIgniter CLI模式简介
2014/06/17 PHP
javascript 写类方式之五
2009/07/05 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
2014/05/01 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
2018/07/26 Javascript
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
Vue 打包体积优化方案小结
2020/05/20 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
Vue组件简易模拟实现购物车
2020/12/21 Vue.js
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
Python3.x和Python2.x的区别介绍
2013/02/12 Python
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
python绘制漏斗图步骤详解
2019/03/04 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
Python threading模块condition原理及运行流程详解
2020/10/05 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
经济担保书范文
2014/04/02 职场文书
班级旅游计划书
2014/05/03 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
学术会议通知
2015/04/15 职场文书
2015年女工委工作总结
2015/07/27 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
html实现弹窗的实例
2021/06/09 HTML / CSS
Python 键盘事件详解
2021/11/11 Python