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="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;
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue.js前端开发实战6.4购物车案例是一个实际应用Vue.js框架来开发一个购物车功能的案例。购物车功能是电商网站中非常常见的功能,通过此案例能够学习到如何使用Vue.js进行页面渲染、数据绑定和事件处理等前端开发技术。 在这个案例中,我们会通过Vue.js实现以下功能: 1. 商品列表展示:通过Vue.js的模板语法,我们可以根据后端返回的数据动态渲染商品列表,展示商品的名称、价格、图片等信息。 2. 商品添加和删除:通过点击“添加到购物车”按钮,我们可以将商品添加到购物车中。同时,我们也可以通过点击购物车中的“删除”按钮,将已选择的商品从购物车中移除。 3. 数量和价格计算:根据购物车中的商品数量,我们可以实时计算出选中商品的总数量和总价格,并展示在页面上。 4. 购物车状态同步:通过Vue.js的双向数据绑定,我们可以实现购物车中商品数量的实时变化,无需刷新页面即可同步。 5. 商品勾选与取消:我们可以通过点击商品前面的勾选框来选择/取消选择商品。选择的商品会被计入总数量和总价格的计算,取消选择的商品会不计入计算。 通过这个案例,我们可以运用Vue.js框架中的数据绑定、计算属性、事件处理等特性,快速开发一个实际的购物车功能。这个案例对于学习Vue.js前端开发人员来说,是一个很好的实践项目,可以提升对Vue.js的理解和熟练度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值