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 相关文章推荐
url 编码 js url传参中文乱码解决方案
Apr 11 Javascript
SharePoint 客户端对象模型 (一) ECMA Script
May 22 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
Aug 09 Javascript
从js向Action传中文参数出现乱码问题的解决方法
Dec 29 Javascript
thinkphp中常用的系统常量和系统变量
Mar 05 Javascript
jquery 按键盘上的enter事件
May 11 Javascript
jquery控制表单输入框显示默认值的方法
May 22 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
Jan 27 Javascript
angular8和ngrx8结合使用的步骤介绍
Dec 01 Javascript
使用webpack搭建vue环境的教程详解
Dec 31 Javascript
javascript canvas检测小球碰撞
Apr 17 Javascript
vant 自定义 van-dropdown-item的用法
Aug 05 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
linux命令之调试工具strace的深入分析
2013/06/03 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
jQuery Ajax之$.get()方法和$.post()方法
2009/10/12 Javascript
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
bootstrap模态框消失问题的解决方法
2016/12/02 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
js图片查看器插件用法示例
2019/06/22 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
2019/09/16 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
[42:32]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.27
2020/12/01 DOTA
python抓取网页中的图片示例
2014/02/28 Python
使用python接入微信聊天机器人
2020/03/31 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
市场营销毕业生自荐信范文
2014/04/01 职场文书
升职演讲稿范文
2014/05/23 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers