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 相关文章推荐
jQuery编写widget的一些技巧分享
Oct 28 Javascript
jquery获得option的值和对option进行操作
Dec 13 Javascript
JS获取单击按钮单元格所在行的信息
Jun 17 Javascript
JavaScript中textRange对象使用方法小结
Mar 24 Javascript
浅谈Jquery核心函数
Jun 18 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
Jun 13 Javascript
JS实现弹出居中的模式窗口示例
Jun 20 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
May 30 Javascript
原生JS实现Ajax跨域请求flask响应内容
Oct 24 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
Oct 16 Javascript
15分钟上手vue3.0(小结)
May 20 Javascript
js实现菜单跳转效果
Dec 11 Javascript
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
javascript中创建对象的三种常用方法
2010/12/30 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
2014/02/07 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
深入浅出讲解ES6的解构
2016/08/03 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
2017/07/27 Javascript
详解a++和++a的区别
2017/08/30 Javascript
详解如何使用 vue-cli 开发多页应用
2017/12/16 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
Python创建xml的方法
2015/03/10 Python
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
TensorFlow实现RNN循环神经网络
2018/02/28 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
Python 寻找局部最高点的实现
2019/12/05 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
市场营销毕业生自荐信
2013/11/23 职场文书
暑期社会实践方案
2014/02/05 职场文书
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
2014年度安全生产目标管理责任书
2014/07/25 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
国际政治学专业推荐信
2014/09/26 职场文书
自查自纠整改报告
2014/11/06 职场文书
给老婆道歉的话
2015/01/20 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
毕业生就业推荐表自我鉴定
2019/06/20 职场文书