angularjs购物车练习
本文是一个简单的购物车练习,功能包括增加、减少某商品的数量,从而影响该商品的购买总价以及所有商品的购买总价;从购物车内移除一项商品;清空购物车。
页面效果如图:
若使用js或jQuery来实现这个页面,会需要绑定很多事件,如减少数量按钮事件,增加数量按钮事件,移除某项商品事件,清空购物车事件,而这些事件之中很多代码很重复,比如计算某项商品的总购买价,计算所有商品的购买总价,不胜其烦,现在有了AngularJS,则简单许多,因为数据模型双向绑定等原因。
上图页面的代码:
html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>angular购物车练习</title>
- <link rel="stylesheet" href="../../vendor/bootstrap3/css/bootstrap.css">
- <script src="../../vendor/angular/angular.min.js"></script>
- <script src="app/index2.js"></script>
- </head>
- <body ng-app="myApp" ng-controller="myCtrl">
- <div class="container">
- <table class="table" ng-show="cartList.length > 0">
- <thead>
- <tr>
- <th>产品编号</th>
- <th>产品名称</th>
- <th>购买数量</th>
- <th>产品单价</th>
- <th>产品总价</th>
- <th>操作</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat="item in cartList">
- <td>{{item.id}}</td>
- <td>{{item.name}}</td>
- <td>
- <button ng-click="reduceOne(item.id)" class="btn btn-primary">-</button>
- <input type="text" ng-model="item.quantity">
- <button ng-click="addOne(item.id)" class="btn btn-primary">+</button>
- </td>
- <td>{{item.price}}</td>
- <td>{{item.quantity * item.price}}</td>
- <td><button ng-click="remove(item.id)" class="btn btn-danger">移除</button></td>
- </tr>
- <tr>
- <td>总购买价</td>
- <td>{{totalCost()}}</td>
- <td>总购买数量</td>
- <td>{{totalCount()}}</td>
- <td colspan="3"><button ng-click="cartList=[]" class="btn btn-danger">清空购物车</button></td>
- </tr>
- </tbody>
- </table>
- <h4 ng-show="cartList.length < 1">您的购物车暂无商品</h4>
- </div>
- </body>
- </html>
index2.js :
- var app=angular.module("myApp",[]);
- app.controller("myCtrl",function($scope){
- $scope.cartList=[
- {id:1000,name:"iphone5s",quantity:3,price:4300},
- {id:1001,name:"iphone5",quantity:30,price:3300},
- {id:1002,name:"imac",quantity:3,price:3000},
- {id:1003,name:"ipad",quantity:5,price:6900}
- ];
- var findIndex=function(id){
- var index=-1;
- angular.forEach($scope.cartList,function(item,key){
- if(item.id == id){
- index=key;
- return;
- }
- });return index;
- };
- //从cartList数组中删除一项产品
- $scope.remove=function(id){
- var index=findIndex(id);
- if(index != -1){
- $scope.cartList.splice(index,1);
- }
- };
- //为某个商品添加一个数量
- $scope.addOne=function(id){
- var index=findIndex(id);
- if(index != -1){
- $scope.cartList[index].quantity ++;
- }
- };
- //位某个商品减少一个数量
- $scope.reduceOne=function(id){
- var index=findIndex(id);
- if(index != -1){
- var item=$scope.cartList[index];
- if(item.quantity > 1){
- item.quantity --;
- }else{
- var returnKey=confirm("删除该商品?");
- if(returnKey){
- $scope.remove(item.id);
- }
- }
- }
- };
- //总购买价
- $scope.totalCost=function(){
- var total=0;
- angular.forEach($scope.cartList,function(item,key){
- total += item.quantity * item.price;
- });return total;
- };
- //总购买数量
- $scope.totalCount=function(){
- var count=0;
- angular.forEach($scope.cartList,function(item,key){
- count += item.quantity;
- });return count;
- };
- //监听输入框更改事件避免输入负数或字符串
- $scope.$watch('cartList',function(newValue,oldValue){
- console.log( "$scope.cartList === newValue "+ ($scope.cartList === newValue) ); //永远为ture newValue指向cartList
- console.log( "$scope.cartList === oldValue "+ ($scope.cartList === oldValue) ); //页面初始化后为true 一旦改动永远为false
- angular.forEach(newValue,function(item,key){
- if( isNaN(item.quantity) ){
- item.quantity=oldValue[key].quantity;
- }
- else if( item.quantity <= 0 ){
- var returnKey=confirm("删除该商品?");
- if(returnKey){
- $scope.remove(item.id);
- }else{
- item.quantity=oldValue[key].quantity;
- }
- }
- });
- },true);
- });
页面中的指令:
ng-app 指定一个应用程序
ng-controller 指定一个控制器
ng-show 值表达式为 true 时,显示本Dom
ng-repeat 重复本Dom
ng-click 指定一个单击事件
angularjs购物车练习的更多相关文章
- angularjs购物车效果
用angularjs写了一个购物车效果中. html代码: <div png-app="myAp" ng-controller="conTroll"> ...
- angularJs 购物车模型
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel= ...
- 动态枢轴网格使用MVC, AngularJS和WEB API 2
下载shanuAngularMVCPivotGridS.zip - 2.7 MB 介绍 在本文中,我们将详细介绍如何使用AngularJS创建一个简单的MVC Pivot HTML网格.在我之前的文章 ...
- AngularJS 实现简单购物车
使用AngularJS实现一个简单的购物车,主要感受强大的双向绑定和只关注对象不关注界面特性. 先看看界面: 点击+-操作和删除: 这些全部只需要操作数据源就行,不需要关注界面. 实现过程: 一.使用 ...
- 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证
原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证 chsakell分享了前端使用AngularJS,后端使用ASP. ...
- 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session
原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session chsakell分享了前端使用AngularJS,后端使用ASP.NE ...
- 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(1)--后端
原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(1)--后端 chsakell分享了前端使用AngularJS,后端使用ASP.NET Web API的购物车 ...
- angularJS商品购物车案例
<!DOCTYPE html> <html ng-app="shopping"> <head lang="en"> < ...
- angularJs 使用中遇到的问题小结【二:购物车引起的问题思考】
问题描述 :购物车引起的问题思考 业务逻辑是这样的:我商品加入购物车后,——>点击购物车图标——>进入订单列表(这里的数据只有首次会加载服务器数据,后面就不会执行控制器的方法了,这里的跳转 ...
随机推荐
- Spring boot(4)-应用打包部署
1.Spring Boot内置web spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动.其内置Tomcat容器或Jetty容器,具体由配置来决定 ...
- Algorithm --> 顺序打印矩阵
顺序打印矩阵 思路 参考代码 #include <iostream> using namespace std; ], int row, int col) { || col < ) r ...
- [poj3984]迷宫问题_bfs
迷宫问题 题目大意:给你一个5*5的矩阵,求左上角到左下角的最短路径. 注释:0或1的矩阵,1表示不能走,0表示能走,保证有唯一最短路径. 想法:bfs爆搜练习题.通过其实点,定义方向数组,然后进行b ...
- 【R语言系列】read.table报错incomplete final line found by readTableHeader
文件内容: id,SGBH,DMSM1,SGDO,SGFSSJ 1,310117620,伤人事故,上海市,2018-03-02 20:04:00 2,310117621,死亡事故,杭州市,2018-0 ...
- 极其简单的帮你理解ORM中的关联关系
ORM对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转 ...
- 关于hadoop集群下Datanode和Namenode无法访问的解决方案
HDFS架构 HDFS也是按照Master和Slave的结构,分namenode,secondarynamenode,datanode这几个角色. Namenode:是maseter节点,是大领导.管 ...
- Beta冲刺合集
Beta冲刺序列: Beta凡事预则立 :Beta No.0 Beta冲刺Day1:Beta No.1 Beta冲刺Day2:Beta No.2 Beta冲刺Day3:Beta No.3 Beta冲刺 ...
- Beta总结篇
45°炸 031502601 蔡鸿杰 031502604 陈甘霖 031502632 伍晨薇 一.项目预期进展及现实进展 项目预期计划 现实进展 Github使用 √ 日拍 (调用相机.相册) √ 足 ...
- 2017-2018-1 20155214&20155216 实验四:外设驱动程序设计
2017-2018-1 20155214&20155216 实验四:外设驱动程序设计 实验四外设驱动程序设计-1 实验要求: 学习资源中全课中的"hqyj.嵌入式Linux应用程序开 ...
- 冲刺NO.12
Alpha冲刺第十二天 站立式会议 项目进展 项目核心功能,如学生基本信息管理模块,学生信用信息模块,奖惩事务管理模块等等都已完成,测试工作大体结束. 问题困难 项目结束后对项目的阶段性总结缺乏一定的 ...