使用子组件触发事件时通过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>