购物车实现一

使用子组件触发事件时通过this.$emit来发送给父组件从而调用父组件的方法来修改总价

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>Title</title>
    <!-- Bootstrap -->
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="./node_modules/vue/dist/vue.js"></script>
    <script type="text/javascript" src="./node_modules/vue-router/dist/vue-router.js"></script>
    <script type="text/javascript" src="./node_modules/axios/dist/axios.js"></script>

</head>
<body>
<div id="box">
    <div class="text-info"><h4>购物车</h4></div>
    <rk-cart :goods="goods"  @sum="total"></rk-cart>

    <div>
        合计:{{totalPrice}}元
    </div>

</div>

<script type="text/x-template" id="cart">
    <table border="1" width="90%">
        <tr>
            <th>序号</th>
            <th>名称</th>
            <th>价格</th>
            <th>数量</th>
            <th>操作</th>
        </tr>

        <tr v-for="(item,key) in goods">
            <td>{{item.id}}</td>
            <td>{{item.goodsName}}</td>
            <td>{{item.price}}</td>
            <td>
                <input type="text" v-model="item.num" @blur="sum">
            </td>
            <td>删除</td>
        </tr>
    </table>
</script>

<script type="text/javascript">

    let rkCart = {
        methods:{
            sum(){
                console.log('sum');
                this.$emit('sum');
            }
        },
        props:['goods'],
        template:'#cart'
    };

    let app = new Vue({
        el:'#box',
        mounted(){
            this.total();
        },
        data:{
            goods:[
                {id:1,goodsName:'iphone 8 Plus',price:6900,num:1},
                {id:2,goodsName:'爱奇艺vip',price:100,num:1},
            ],
            totalPrice:0,
        },
        components:{rkCart},
        methods:{
            total(){
                this.totalPrice = 0;
                this.goods.forEach(v=>{
                    this.totalPrice += v.price * v.num;
                });
            }
        }
    });
</script>
</body>
</html>

  

猜你喜欢

转载自www.cnblogs.com/wntd/p/9051277.html