Vuejs实现购物车功能
程序员文章站
2022-04-09 21:29:55
开始更新前端框架vue.js的相关博客。
功能概述
学习了vue.js的一些基础知识,现在利用指令、数据绑定这些基础知识开发一个简单的购物车功能。功能要点如下:
(...
开始更新前端框架vue.js的相关博客。
功能概述
学习了vue.js的一些基础知识,现在利用指令、数据绑定这些基础知识开发一个简单的购物车功能。功能要点如下:
(1)展示商品的名称、单价和数量;
(2)商品的数量可以增加和减少;
(3)购物车的总价要实时更新,即数量发生变动,总价也要相应的改变;
(4)商品可以从购物车中移除;
(5)具有选择功能,只计算选中的商品的总价。
上一张截图,如下:
代码
代码分成三部分,分别是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前端组件学习教程进行学习。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 浅谈react 同构之样式直出