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 相关文章推荐
IE 上下滚动展示模仿Marquee机制
Dec 20 Javascript
基于jquery跨浏览器显示的file上传控件
Oct 24 Javascript
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
Dec 31 Javascript
JS动态增加删除UL节点LI及相关内容示例
May 21 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
Feb 02 Javascript
Three.js中网格对象MESH的属性与方法详解
Sep 27 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
Sep 03 Javascript
详解Vue前端对axios的封装和使用
Apr 01 Javascript
webpack3升级到webpack4遇到问题总结
Sep 30 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
Nov 04 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
May 31 Javascript
vue在图片上传的时候压缩图片
Nov 18 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
上传多个文件的PHP脚本
2006/11/26 PHP
php中的时间显示
2007/01/18 PHP
PHP中其实也可以用方法链
2011/11/10 PHP
如何在PHP中使用正则表达式进行查找替换
2013/06/13 PHP
简单实现php上传文件功能
2017/09/21 PHP
javascript中的location用法简单介绍
2007/03/07 Javascript
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
2014/09/09 Javascript
WEB前端设计师常用工具集锦
2014/12/09 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
jQuery实现用户信息表格的添加和删除功能
2017/09/12 jQuery
js实现九宫格抽奖
2020/03/19 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
Django实现基于类的分页功能
2019/10/31 Python
python 实现一个反向单位矩阵示例
2019/11/29 Python
python中的测试框架
2020/11/13 Python
学习十八大精神心得体会
2013/12/31 职场文书
初一科学教学反思
2014/01/27 职场文书
社会学专业求职信
2014/02/24 职场文书
2014年党员承诺书范文
2014/05/20 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
2015年度保密工作总结
2015/04/24 职场文书
公司车队管理制度
2015/08/04 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python
Python编解码问题及文本文件处理方法详解
2021/06/20 Python
Redis实战高并发之扣减库存项目
2022/04/14 Redis
Python实现双向链表
2022/05/25 Python