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 相关文章推荐
Aptana调试javascript图解教程
Nov 30 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
Jul 09 Javascript
5分钟理解JavaScript中this用法分享
Nov 09 Javascript
javascript中apply和call方法的作用及区别说明
Feb 14 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
Dec 11 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
Oct 26 Javascript
jQuery联动日历的实例解析
Dec 02 Javascript
canvas的神奇用法
Feb 03 Javascript
Vue.js2.0中的变化小结
Oct 24 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
Apr 26 Javascript
Electron实现应用打包、自动升级过程解析
Jul 07 Javascript
vue video和vue-video-player实现视频铺满教程
Oct 30 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中养成7个面向对象的好习惯
2010/01/28 PHP
php生成动态验证码gif图片
2015/10/19 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
JavaScript动态数量的文件上传控件
2016/11/18 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
js实现横向拖拽导航条功能
2017/02/17 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
原生js中ajax访问的实例详解
2017/09/19 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
vue2.0项目集成Cesium的实现方法
2019/07/30 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
jQuery实现飞机大战小游戏
2020/07/05 jQuery
Python中多线程的创建及基本调用方法
2016/07/08 Python
Python常见格式化字符串方法小结【百分号与format方法】
2016/09/18 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
python模块导入的方法
2019/10/24 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
2020/04/12 Python
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
家佳咖啡店创业计划书
2013/12/27 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
交通安全主题班会
2015/08/12 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS