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(AJAX)解析XML的代码(兼容FIREFOX/IE)
Jul 11 Javascript
js confirm()方法的使用方法实例
Jul 13 Javascript
JS动态调用方法名示例介绍
Dec 18 Javascript
jQuery构造函数init参数分析续
May 13 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
Aug 12 Javascript
原生js实现class的添加和删除简单代码
Jul 12 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
Nov 23 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
Dec 26 Javascript
jQuery实现按比例缩放图片的方法
Apr 29 jQuery
Vuex利用state保存新闻数据实例
Jun 28 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
Jul 10 Javascript
vue2.0实现前端星星评分功能组件实例代码
Feb 12 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
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
PHP实现适用于自定义的验证码类
2016/06/15 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
图像替换新技术 状态域方法
2010/01/28 Javascript
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
围观tangram js库
2010/12/28 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
JS实现显示带倒影的图片横排居中放大展示特效实例【测试可用】
2016/08/23 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
2017/12/11 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
详解python并发获取snmp信息及性能测试
2017/03/27 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
django orm模块中的 is_delete用法
2020/05/20 Python
python线程池如何使用
2020/05/28 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
戴森英国官网:Dyson英国
2019/05/07 全球购物
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
区域总监的岗位职责
2013/11/21 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
军训心得体会范文(2016最新篇)
2016/01/11 职场文书
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js