angular和BootStrap3实现购物车功能

(编辑:jimmy 日期: 2024/10/1 浏览:2)

一、页面搭建

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="/UploadFiles/2021-04-02/angular.js">

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实现购物车功能

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

一句话新闻

一文看懂荣耀MagicBook Pro 16
荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?