欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Vuejs实现购物车功能

程序员文章站 2022-07-06 20:55:46
开始更新前端框架vue.js的相关博客。 功能概述 学习了vue.js的一些基础知识,现在利用指令、数据绑定这些基础知识开发一个简单的购物车功能。功能要点如下: (...

开始更新前端框架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前端组件学习教程进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。