vue基础实战---购物车的实现

 index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>购物车</title>
    <!-- 样式引入 -->
    <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
    <div id="app" v-cloak>
        <template v-if="list.length">
            <table>
                <thead>
                    <tr>
                        <th></th>
                        <th>商品名称</th>
                        <th>商品单价</th>
                        <th>购买数量</th>
                        <th>操作</th>
                    </tr>
                </thead>
                <tbody>
                    <tr v-for="(item,index) in list">
                        <td>{
   
   {index+1}}</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="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js"></script>
    <!-- 引入js -->
    <script src="index.js"></script>
</body>
</html>

index.js文件

//实例初始化
var app = new Vue({
    el:'#app',
    data:{
        //商品列表
        list:[
           {
            id:1,
            name:'iPhone 7',
            price:6188,
            count:1,
           },
           {
            id:2,
            name:'iPad Pro',
            price:5888,
            count:1,
           },
           {
            id:3,
            name:'MacBook Pro',
            price:21488,
            count:1,
           }
        ]

    },
    computed: {
        totalPrice:function(){
            var total=0;
            for(let i=0;i<this.list.length;i++){
                var item=this.list[i];
                total+=item.price*item.count;
            }
            //将结果转换为带有千位分割符的数字
            return total.toString().replace(/\B(?=(\d{3})+$)/g,',');
        }
    },
    methods: {
        handleReduce:function(index) {
            if(this.list[index].count===1) return;
            this.list[index].count--;
        },
        handleAdd:function(index){
            this.list[index].count++;
        },
        handleRemove:function(index){
            this.list.splice(index, 1);
        }
    },
})

style.css文件

[v-cloak]{
    display: none;
}
table{
    border: 1px solid #e9e9e9;
    border-collapse: collapse;
    border-spacing: 0;
    empty-cells: show;
}
th, td{
    padding: 8px 16px;
    border: 1px solid #e9e9e9;
    text-align: left;
}
th{
    background: #f7f7f7;
    color: #5c6b77;
    font-weight: 600;
    white-space: nowrap;
}

猜你喜欢

转载自blog.csdn.net/acx0000/article/details/126040486
今日推荐