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的一个简单的脚本验证插件
Apr 05 Javascript
JQuery为textarea添加maxlength属性的代码
Apr 07 Javascript
jquery插件开发方法(初学者)
Feb 03 Javascript
Javascript模拟加速运动与减速运动代码分享
Dec 11 Javascript
jQuery遍历json的方法(推荐)
Jun 12 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
Jul 12 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
Dec 13 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
Aug 12 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
Nov 10 Javascript
详解vue 兼容IE报错解决方案
Dec 29 Javascript
浅谈react路由传参的几种方式
Mar 23 Javascript
小程序实现筛子抽奖
May 26 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下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
PHP Pear 安装及使用
2009/03/19 PHP
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
php empty函数判断mysql表单是否为空
2010/04/12 PHP
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
JavaScript单元测试ABC
2012/04/12 Javascript
js取消单选按钮选中并判断对象是否为空
2013/11/14 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
JavaScript中操作字符串之localeCompare()方法的使用
2015/06/06 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
2015/09/15 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
2015/10/22 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
整理Python最基本的操作字典的方法
2015/04/24 Python
整理Python中的赋值运算符
2015/05/13 Python
python爬虫实例详解
2018/06/19 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
python如何将多个PDF进行合并
2019/08/13 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
品质管理部岗位职责范文
2014/03/01 职场文书
校园元旦活动总结
2014/07/09 职场文书
青年文明号汇报材料
2014/12/23 职场文书
防溺水安全教育主题班会
2015/08/12 职场文书
创业计划书之酒厂
2019/10/14 职场文书
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis
python字符串的一些常见实用操作
2022/04/06 Python