Vuejs实现购物车功能


Posted in Javascript onNovember 05, 2017

开始更新前端框架Vue.JS的相关博客。

功能概述

学习了Vue.JS的一些基础知识,现在利用指令、数据绑定这些基础知识开发一个简单的购物车功能。功能要点如下:
(1)展示商品的名称、单价和数量;
(2)商品的数量可以增加和减少;
(3)购物车的总价要实时更新,即数量发生变动,总价也要相应的改变;
(4)商品可以从购物车中移除;
(5)具有选择功能,只计算选中的商品的总价。

上一张截图,如下:

Vuejs实现购物车功能

代码

代码分成三部分,分别是HTML、JS、CSS。关键的是HTML和JS。

HTML

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 <title>Vue 购物车</title>
 <script src="../js/vue.min.js"></script>
 <link href="../css/cart.css" rel="external nofollow" rel="stylesheet">
 </head>
 <body>
 <div id="app" v-cloak>
  <template v-if="list.length">
  <table>
   <thead>
   <tr>
    <th><input type="checkbox" v-on:click="swapCheck" v-model="checked"></th>
    <th>商品名称</th>
    <th>商品单价</th>
    <th>商品数量</th>
    <th>操作</th>
   </tr>   
   </thead>
   <tbody>
   <tr v-for="(item,index) in list">
    <td><input type="checkbox" v-model="selectList" :id="item.id" :value="index" name="selectList" ></td>
    <td>{{ item.name }}</td>
    <td>{{ item.price }}</td>
    <td>
    <button @click="handleReduce(index)" :disabled="item.count === 1">-</button>
    {{ item.count }}
    <button @click="handleAdd(index)">+</button>
    </td>
    <td><button @click="handleRemove(index)">移除</button></td>
   </tr>
   </tbody>
  </table>
  <div>总价:¥ {{ totalPrice }}</div>
  </template>
  <div v-else>购物车为空!</div>
 </div>

 <script src="../js/cart.js"></script>
 </body>
</html>

JS

var app = new Vue({
 el:'#app',
 data:{
 list:[
  {
  id:1,
  name:'iPhone 8',
  price:8888,
  count:1
  },
  {
  id:2,
  name:'Huwei Mate10',
  price:6666,
  count:1
  },
  {
  id:3,
  name:'Lenovo',
  price:6588,
  count:1
  }
 ],
 selectList:[],
 checked:false
 },
 computed:{
 totalPrice:function(){
  var total = 0;
  for(var i = 0,len = this.selectList.length;i < len;i++){
  var index = this.selectList[i];
  var item = this.list[index];
  if(item){
   total += item.price * item.count;
  }
  else{
   continue;
  }

  }
  return total.toString().replace(/\B(?=(\d{3})+$)/g,',');
 }
 },
 methods:{
 handleReduce:function(index){
  var item = this.list[index];
  if(item.count < 2){
  return;
  }
  item.count--;
 },
 handleAdd:function(index){
  var item = this.list[index];
  item.count++;
 },
 handleRemove:function(index){
  this.list.splice(index,1);
 },
 swapCheck:function(){

  var selectList = document.getElementsByName('selectList');
  var len = selectList.length;
  if(this.checked){
  for(var i = 0;i < len;i++){
   var item = selectList[i];
   item.checked = false;
  }
  this.checked = false;
  this.selectList = [];
  }
  else{
  for(i = 0;i < len;i++){
   item = selectList[i];
   if(item.checked === false){
   item.checked = true;
   this.selectList.push(selectList[i].value);
   }
  }
  this.checked = true;

  }
 }
 }
});

CSS

[v-cloak]{
 display: none;
}

table{
 border: 1px solid black;
 border-collapse: collapse;
 border-spacing: 0;
 empty-cells: show;
}

th,td{
 padding: 8px 16px;
 border:1px solid black;
 text-align: center;
}

th{
 background-color: gray;
}

关于vue.js的学习教程,请大家点击专题vue.js组件学习教程、Vue.js前端组件学习教程进行学习。

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

Javascript 相关文章推荐
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
Jul 26 Javascript
js中parseInt函数浅谈
Jul 31 Javascript
Node.js的特点和应用场景介绍
Nov 04 Javascript
jQuery的基本概念与高级编程
May 14 Javascript
jquery实现的Banner广告收缩效果代码
Sep 02 Javascript
jquery使用on绑定a标签无效 只能用live解决
Jun 02 Javascript
javascript入门之string对象【新手必看】
Nov 22 Javascript
详解vue.js组件化开发实践
Dec 14 Javascript
微信小程序之电影影评小程序制作代码
Aug 03 Javascript
基于layui数据表格以及传数据的方式
Aug 19 Javascript
vue下使用nginx刷新页面404的问题解决
Aug 02 Javascript
vue props对象validator自定义函数实例
Nov 13 Javascript
JavaScript实现音乐自动切换和轮播
Nov 05 #Javascript
vue+node+webpack环境搭建教程
Nov 05 #Javascript
JavaScript实现三级级联特效
Nov 05 #Javascript
angular中不同的组件间传值与通信的方法
Nov 04 #Javascript
详解使用React全家桶搭建一个后台管理系统
Nov 04 #Javascript
JavaScript中立即执行函数实例详解
Nov 04 #Javascript
Vue全家桶实践项目总结(推荐)
Nov 04 #Javascript
You might like
php 静态变量的初始化
2009/11/15 PHP
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
2014/11/24 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
PHP编译安装时常见错误解决办法
2015/05/28 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
Angular2 自定义validators的实现方法
2017/07/05 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
jQuery实现容器间的元素拖拽功能
2020/12/01 jQuery
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
Python实现求解括号匹配问题的方法
2018/04/17 Python
Python实现简单的文本相似度分析操作详解
2018/06/16 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
香港礼品网站:GiftU eshop
2017/09/01 全球购物
全球立体声:World Wide Stereo
2018/09/29 全球购物
会计专业毕业生自我鉴定
2013/10/29 职场文书
优秀护士先进事迹
2014/05/08 职场文书
团队口号大全
2014/06/06 职场文书
环境卫生标语
2014/06/09 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
给客户的检讨书
2014/12/21 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
本地通过nginx配置反向代理的全过程记录
2021/03/31 Servers
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis