购物车实现一
使用子组件触发事件时通过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>
浙公网安备 33010602011771号