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提交多个表单的小技巧
Jul 27 Javascript
js获取元素相对窗口位置的实现代码
Sep 28 Javascript
封装了jQuery的Ajax请求全局配置
Feb 05 Javascript
javascript实现检验的各种规则
Jul 31 Javascript
jQuery实现进度条效果代码
Dec 17 Javascript
JavaScript模版引擎的基本实现方法浅析
Feb 15 Javascript
javaScript语法总结
Nov 25 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
Feb 14 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
Mar 15 Javascript
Vuex的热更替如何实现
Jun 05 Javascript
vue通过接口直接下载java生成好的Excel表格案例
Oct 26 Javascript
React列表栏及购物车组件使用详解
Jun 28 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
php下过滤HTML代码的函数
2007/12/10 PHP
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
jQuery使用post方法提交数据实例
2015/03/25 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
angular实现spa单页面应用实例
2017/07/10 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
微信小程序网络请求实现过程解析
2019/11/06 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
django query模块
2019/04/20 Python
Python中的正则表达式与JSON数据交换格式
2019/07/03 Python
Python实现自动访问网页的例子
2020/02/21 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
如何清空python的变量
2020/07/05 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
Python约瑟夫生者死者小游戏实例讲解
2021/01/04 Python
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
介绍一下OSI七层模型
2012/07/03 面试题
学习十八大精神心得体会
2013/12/31 职场文书
汽车销售经理岗位职责
2014/06/09 职场文书