AngularJS 实现购物车全选反选功能


Posted in Javascript onOctober 24, 2017

废话不多说了,直接给大家贴代码了,具体代码如下所示; 

<!DOCTYPE html>
<html lang="en" ng-app="testMo">
<head>
 <meta charset="UTF-8">
 <title></title>
 <link rel="stylesheet" href="css/bootstrap.css" rel="external nofollow" >
 <style>
 .div1{
  margin: 20px;
 }
 </style>
</head>
<body>
<div ng-controller="testCtrl" class="div1">
 <h4>angularJS--购物车实现全选/取消全选</h4>
 <button type="button" class="btn btn-info" ng-click="addProduct()">添加商品</button>
 <button type="button" class="btn btn-danger" ng-click="deleteProduct()">删除商品</button>
 <br><br>
 <table class="table table-bordered table-responsive" >
 <thead>
 <td>操作</td>
 <td>check状态</td>
 <td>商品名称</td>
 <td>单价</td>
 <td>数量</td>
 <td>小计</td>
 </thead>
 <tr ng-repeat="p in cart" >
  <td><input type="checkbox" ng-checked="p.checked" ng-click="echoChange(p.id,p.checked,selectAll)"></td>
  <td>{{p.checked}}||{{p.checked}}</td>
  <td>{{p.name}}</td>
  <td>单价:¥{{p.price}}</td>
  <td>数量:<input type="number" ng-model="p.count" min="0" value="p.count"></td>
  <td>小计:¥{{p.sum}}</td>
 </tr>
 </table>
 <br>
 <input type="checkbox" ng-model="selectAll" ng-click="selectAllClick(selectAll)"><span ng-hide="selectAll" >全选</span><span ng-show="selectAll">取消全选</span>
 <br><br>
 已选择<span>{{jishuqi}}</span>件商品,总金额:<span>¥{{ sumTotal }}</span>
</div>
<script src="../js/angular.js"></script>
<script>
 angular.module('testMo',['ng']).controller('testCtrl',function($scope){
// $scope.p1=new Object();
// $scope.p1.price=10;
// $scope.p1.count=1;
 //购物车应该是一个数组
 $scope.selectAll=false;//全选默认为false
 $scope.cart=[{id:0,name:'商品0',price:10,count:5,sum:10,checked:false}];
 $scope.addProduct= function (){
  var p=new Object();
  p.id=$scope.cart.length;
  p.name='商品'+ p.id
  p.price=Math.floor(Math.random()*100);//对数值向下取整
  p.count=1;
  p.sum= p.price* p.count;
  p.checked=false;
  $scope.cart.push({id: p.id,name: p.name,price:p.price,count: p.count,sum: p.sum,checked: p.checked});
  console.log($scope.cart);
 }
 //删除商品
 $scope.deleteProduct= function (){
  $scope.cart.pop();//删除数组中的最后的一个元素,并且返回这个元素,会改变数组里的元素
 }
 //全选按钮check的点击事件
 $scope.selectAllClick= function (sa) {
  for(var i=0;i<$scope.cart.length;i++){
  $scope.cart[i].checked=sa;
  }
 }
 //单个数据的check事件
 $scope.echoChange=function(id,ch,se){
  $scope.cart[id].checked=!ch;
  //当所有都选中时,全选也要被勾选
  var cc=0;//计算当前数组中checked为真的数目
  for(var i=0;i<$scope.cart.length;i++){
//  if($scope.cart[i].checked==true){
//   cc++;
//  }
  $scope.cart[i].checked?cc++:cc;
  }
  $scope.selectAll=(cc==$scope.cart.length);//当为真的数目=数组长度时,证明全部勾选
//  console.log($scope.selectAll);
 }
 //监控数据
 $scope.$watch('cart',function(newValue,oldValue,scope){
  $scope.sumTotal=0; //总计
  $scope.jishuqi=0; //计数器
  for(var i in newValue) {
  var sumN = newValue[i].count * newValue[i].price; //计算出新的结果
  $scope.cart[i].sum = sumN.toFixed(2); //保留两位小数并且把它赋值给元数据;
  if (newValue[i].checked) {
   $scope.sumTotal += sumN;
   $scope.jishuqi++;
//   console.log($scope.sumTotal);
//   console.log($scope.jishuqi);
  }
  }
 },true);
 /*$watch简介:在digest执行时,如果watch观察的的value与上一次执行时不一样时,就会被触发。
  AngularJS内部的watch实现了页面随model的及时更新。
  $watch方法在用的时候主要是手动的监听一个对象,但对象发生变化时触发某个事件。
  $watch(watchFn,watchAction,deepWatch);
  如果不加第三个参数,那么只会监听cart数组,只有当cart引用改变时才会触发,因此当需要监听一些引用对象时需要把第三个参数设置成true。
  */
 });
</script>
</body>
</html>

PS:下面给大家分享angularjs 购物车的代码,具体代码如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>购物车</title>
  <script type="text/javascript" src="js/angular.js"></script>
</head>
<body ng-app="product" ng-controller="productController">
<center>
<h2>商品列表</h2>
<div class="container">
  <!--导航栏-->
  <nav>
    <div >
      <div id="bs-example-navbar-collapse-1">
        <div>
          <input type="text" ng-model="search" placeholder="产品名称">   
           产品价格:
          <select>
            <option>0-1000</option>
            <option>1000-2000</option>
            <option>2000-5000</option>
          </select>   
          <input type="button" style="background:#FF0000" value="全部删除" ng-click="removeAll()">
        </div>
      </div>
    </div>
  </nav><br />
  <table border="1 solid" cellpadding="10" cellspacing="0">
    <thead>
    <tr>
      <th ng-click="sortProduct('id')">
        产品编号
        <span></span>
      </th>
      <th ng-click="sortProduct('name')">
        产品名称
        <span></span>
      </th>
      <th ng-click="sortProduct( 'price')">
        产品价格
        <span></span>
      </th>
      <th>
        操作
        <span></span>
      </th>
    </tr>
    </thead>
    <tbody>
    <tr ng-repeat="item in productList | filter:{ 'name':search} | orderBy:(orderSign+orderColumn) ">
      <td>
        {{item.id}}
      </td>
      <td>
        {{item.name}}
      </td>
      <td>
        {{item.price | currency:'(RMB)'}}
      </td>
      <td>
         <input type="button" style="background:#FF0000" value="删除"  ng-click="delProduct(item.name)">
      </td>
    </tr>
    </tbody>
  </table>
</div>
<script>
  angular.module('product',[])
    .factory('productList',function(){
      return [
        { id:910,name:"imac",price:15400 },
        { id:80,name:"iphone",price:5400 },
        { id:29,name:"ipad",price:14200 },
        { id:500,name:"ipad air",price:23400 },
        { id:1200,name:"ipad mini",price:22000},
        { id:100,name:"android",price:9990 }
      ]
    })
    .controller('productController',function($scope,productList){
      /*$scope.search = "ipad";//定义一个变量
      alert($scope.search);*/
      $scope.productList=productList
      $scope.orderColumn='name'; //排序字段
      $scope.orderSign='-';   //为空时正序 为负号时倒序
      $scope.sortProduct=function(sortColumn){ //点击列标题排序事件
        $scope.orderColumn=sortColumn;//觉得按照那一列进行排序
        if($scope.orderSign=="-"){
          $scope.orderSign="";
        }else{
          $scope.orderSign='-';
        }
      };
      //删除产品
      $scope.delProduct = function(name){
        //alert(name);
        if(name!=""){
          if(confirm("是否删除"+name+"商品") ){
            var p;
            for (index in $scope.productList) {
              p = $scope.productList[index];
              if(p.name == name){
                $scope.productList.splice(index,1);
              }
            }
          }
        }
      }
      //清空购物车
$scope.removeAll = function(){
if(confirm("你确定要清空购物车所有商品吗?")){
$scope.productList = [];
}
}
    });
</script>
</center>
</body>
</html>

好了,代码到此结束。

总结

以上所述是小编给大家介绍的AngularJS 实现购物车全选反选功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
mailto的使用技巧分享
Dec 21 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
Feb 22 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
Sep 15 Javascript
JavaScript隐式类型转换
Mar 15 Javascript
JS+CSS3实现超炫的散列画廊特效
Jul 16 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
Oct 13 Javascript
解决Window10系统下Node安装报错的问题分析
Dec 13 Javascript
iframe与主框架跨域相互访问实现方法
Sep 14 Javascript
js移动端图片压缩上传功能
Aug 18 Javascript
JavaScript 正则命名分组【推荐】
Jun 07 Javascript
学习jQuery中的noConflict()用法
Sep 28 jQuery
layui问题之渲染数据表格时,仅出现10条数据的解决方法
Sep 12 Javascript
React Native时间转换格式工具类分享
Oct 24 #Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
Oct 24 #Javascript
React Native AsyncStorage本地存储工具类
Oct 24 #Javascript
React Native验证码倒计时工具类分享
Oct 24 #Javascript
详解vue + vuex + directives实现权限按钮的思路
Oct 24 #Javascript
React Native实现地址挑选器功能
Oct 24 #Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
Oct 24 #Javascript
You might like
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
Node.js 条形码识别程序构建思路详解
2016/02/14 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
2020/02/10 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
Python返回真假值(True or False)小技巧
2015/04/10 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
python 生成图形验证码的方法示例
2018/11/11 Python
python中pip的使用和修改下载源的方法
2019/07/08 Python
使用python实现kNN分类算法
2019/10/16 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
意大利体育用品网上商城:Nencini Sport
2016/08/18 全球购物
写给女生的道歉信
2014/01/08 职场文书
社区戒毒工作方案
2014/06/04 职场文书
小学运动会入场口号
2015/12/24 职场文书
方法汇总:Python 安装第三方库常用
2022/04/26 Python
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android