如何使用vue实现一个简易的购物车

先看效果图
这里写图片描述

直接上代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.0.2/css/bootstrap.min.css"/>
</head>
<body>

    <div id="app" class="container">
        <table class="table">
            <thead>
                <tr>
                    <th>产品编号</th>
                    <th>产品名字</th>
                    <th>购买数量</th>
                    <th>产品单价</th>
                    <th>产品总价</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                <tr v-for="(item , index) in message">
                    <td @click="jia(index)">{{item.id}}</td>
                    <td>{{item.name}}</td>
                    <td>
                        <button type="button" class="btn tn-primary" @click="subtract(index)">-</button>
                        <input type="text" v-model="item.quantity">
                        <button type="button" class="btn tn-primary" @click="add(index)">+</button>
                    </td>
                    <td>{{item.price | filtermoney}}</td>
                    <!--<td>{{arr[index].one}}</td>-->
                    <td>{{item.price*item.quantity | filtermoney}}</td>
                    <td>
                        <button type="button" class="btn btn-danger" @click="remove(index)">移除</button>
                    </td>
                </tr>
                <tr>
                    <td>总购买价            
                    </td>
                    <td>
                        {{animatenum | filtermoney}}
                    </td>
                    <td>总购买数量
                    </td>
                    <td>

                    </td>
                    <td colspan="2">
                        <button type="button" class="btn btn-danger" @click="empty()">清空购物车</button>
                    </td>
                </tr>
            </tbody>
        </table>

        <p v-if="message.length===0">您的购物车为空</p>
    </div>
    <script src="https://unpkg.com/tween.js@16.3.4"></script>
    <script src="https://cdn.bootcss.com/vue/2.2.3/vue.min.js"></script>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
                totalPrice:0,
                animatenum:0,
                message:[
                    {
                        id: 007,
                        name: 'iphone5s',
                        quantity: 3,
                        price: 4000
                   },{
                        id: 1340,
                        name: 'iphone5',
                        quantity: 9,
                        price: 3000
                   },{
                        id: 7758,
                        name: 'imac',
                        quantity: 4,
                        price: 7000
                   },{
                        id: 2017,
                        name: 'ipad',
                        quantity: 5,
                        price: 6000
                    }
                ]
            },
            watch:{
                toComput2:function(newValue,oldValue){
                    this.tween(newValue,oldValue);
                }
            },
            computed:{
                //计算总金额
                toComput2:function(){
                    var vm=this;
                    //每次进来要重置总金额
                    vm.totalPrice=0;
                    this.message.forEach(function(mess){
                        vm.totalPrice+=parseInt(mess.price*mess.quantity);
                    })
                    return this.totalPrice;
                }
            },
            filters:{
                filtermoney:function(value){
                    return '¥'+value ;
                }
            },
            mounted:function(){ 
                this.tween('97000','0');
            },
            methods:{
                //计算总数的方法为什么写在methods里面就不行?
                toComput:function(){
                    var vm=this;
                    vm.message.forEach(function(mess){
                        vm.totalPrice+=parseInt(mess.price*mess.quantity);
                    })
                    return vm.totalPrice;
                },
                add:function(index){
                    var vm=this;
                    vm.message[index].quantity++;
                },
                subtract:function(index){
                    var vm=this;
                    vm.message[index].quantity--;
                    if(vm.message[index].quantity<=0){
                        if (confirm("你确定移除该商品?")) {  
                            vm.message.splice(index,1)
                        } 
                    }

                },
                remove:function(index){
                    var vm=this;
                    if (confirm("你确定移除该商品?")) {  
                        vm.message.splice(index,1)
                    }  
                },
                empty:function(){
                    var vm=this;
                    vm.message.splice(0,vm.message.length);
                },
                jia:function(index){
                    var vm=this;
                    vm.arr[index].one++;
                },
                tween:function(newValue,oldValue){
                    var vm=this;
                    var twen=new TWEEN.Tween({animatenum:oldValue});
                    function animate() {
                        requestAnimationFrame(animate);         
                        TWEEN.update(); 
                    };
                    twen.to({animatenum:newValue},750);
                    twen.onUpdate(function(){
                    //toFixed();保留几位小数
                        vm.animatenum = this.animatenum.toFixed();
                    })
                    twen.start();
                    animate();
                }
            }
        });


    </script>   

</body>
</html>
Vue.js 中编一个简单的购物车功能,我们可以创建一个组件来表示购物车,包含商品列表、添加到购物车的操作以及购物车总价等基本元素。以下是简化的步骤: 1. 首先安装Vue CLI并创建一个新的项目: ```bash npm install -g @vue/cli vue create ShoppingCartApp cd ShoppingCartApp ``` 2. 然后在 `src/components` 目录下创建一个名为 `ShoppingCart.vue` 的文件,内容如下: ```html <template> <div class="shopping-cart"> <h2>购物车</h2> <ul> <li v-for="(product, index) in products" :key="index"> {{ product.name }} - {{ product.price }} <button @click=" addToCart(product)">加入购物车</button> </li> </ul> <p>Total: {{ totalPrice }}</p> </div> </template> <script> export default { data() { return { products: [ { name: '产品A', price: 10 }, { name: '产品B', price: 20 }, // 更多商品... ], cartItems: [], totalPrice: 0, }; }, methods: { addToCart(product) { this.cartItems.push(product); this.totalPrice += product.price; }, }, }; </script> <style scoped> .shopping-cart { /* 样式 */ } </style> ``` 3. 在 App.vue 或其他合适的组件里引入并使用 Shopping Cart 组件: ```html <template> <div id="app"> <!-- 其他内容 --> <ShoppingCart /> </div> </template> <script> import ShoppingCart from '@/components/ShoppingCart.vue'; export default { components: { ShoppingCart, }, }; </script> ``` 4. 当然,为了实现真正的购物车功能,比如从服务器获取数据、存储购物车状态等,你可以考虑使用 Vuex 作为状态管理库。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值