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 相关文章推荐
Javascript实现DIV滚动自动滚动到底部的代码
Mar 01 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
Nov 17 Javascript
js仿微博动态栏功能
Feb 22 Javascript
javascript使用btoa和atob来进行Base64转码和解码
Mar 20 Javascript
Vue.js 插件开发详解
Mar 29 Javascript
Angular5给组件本身的标签添加样式class的方法
Apr 07 Javascript
微信小程序实现发送验证码按钮效果
Dec 20 Javascript
vue.js多页面开发环境搭建过程
Apr 24 Javascript
webpack中如何加载静态文件的方法步骤
May 18 Javascript
uin-app+mockjs实现本地数据模拟
Aug 26 Javascript
vue-router 按需加载 component: () =&gt; import() 报错的解决
Sep 22 Javascript
JavaScript实现优先级队列
Dec 06 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
星际争霸 Starcraft 编年史
2020/03/14 星际争霸
PHP中动态HTML的输出技术
2006/10/09 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
AngularJS实现自定义指令及指令配置项的方法
2017/11/20 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
原生JavaScript实现的简单放大镜效果示例
2018/02/07 Javascript
原生javascript实现连连看游戏
2019/01/03 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
原生Vue 实现右键菜单组件功能
2019/12/16 Javascript
[50:02]完美世界DOTA2联赛循环赛 Magma vs IO BO2第一场 11.01
2020/11/02 DOTA
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
python文件和目录操作函数小结
2014/07/11 Python
Python实现定时精度可调节的定时器
2018/04/15 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
python中的协程深入理解
2019/06/10 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
python输出决策树图形的例子
2019/08/09 Python
python中open函数的基本用法示例
2019/09/07 Python
parser.add_argument中的action使用
2020/04/20 Python
Python日志处理模块logging用法解析
2020/05/19 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
C语言面试题
2013/05/19 面试题
幼儿园教师奖惩制度
2014/02/01 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
学校安全生产承诺书
2014/05/23 职场文书
生产助理岗位职责
2014/06/18 职场文书
电工实训报告总结
2014/11/05 职场文书
外出考察学习心得体会
2016/01/18 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python
css height属性中的calc方法详解
2021/06/03 HTML / CSS
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python
sql通过日期判断年龄函数的示例代码
2021/07/16 SQL Server